pvm-0.1.5/0000755002606100260610000000000010330414266012566 5ustar houckhouck00000000000000pvm-0.1.5/doc/0000755002606100260610000000000010330414315013326 5ustar houckhouck00000000000000pvm-0.1.5/doc/tm/0000755002606100260610000000000010330414315013746 5ustar houckhouck00000000000000pvm-0.1.5/doc/tm/Makefile0000644002606100260610000000500310240361604015406 0ustar houckhouck00000000000000# -*- sh -*- # # To create the SGML files, you will need to install the tm-utils # package. See http://www.jedsoft.org/ for more information. # TMDIST = $(HOME)/sys# src/web/tm-dist TMEXPAND = $(TMDIST)/bin/tmexpand MACRODIR = $(TMDIST)/share/tmexpand DOC = pvm TXT_FILES = $(DOC).txt SGML_FILES = $(DOC).sgml HTML_FILES = $(DOC).html TEX_FILES = $(DOC).tex PS_FILES = $(DOC).ps PDF_FILES = $(DOC).pdf HLP_FILE = $(DOC).hlp HLP_TM_FILE = helpfile.tm HLPFUNS_TM = pvmfuns.tm pvm_msfuns.tm SGML2LATEX = sgml2latex -p letter -o tex SGML2HTML = sgml2html SGML2TXT = sgml2txt -f LATEX = latex PDFLATEX = pdflatex TEXTDIR = ../text PSDIR = ../ps PDFDIR = ../pdf HTMLDIR = ../html SGMLDIR = ../sgml HELPDIR = ../help SUBDIRS = $(TEXTDIR) $(HTMLDIR) $(PSDIR) $(PDFDIR) $(SGMLDIR) $(HELPDIR) SRCDIR = `pwd` all: $(SGML_FILES) $(HTML_FILES) $(TEX_FILES) $(TXT_FILES) $(HLP_FILE) text-files: $(TXT_FILES) #----- SGML Files ----------------------------------------------------------- $(DOC).sgml : $(DOC).tm $(HLPFUNS_TM) $(TMEXPAND) -I$(MACRODIR) $(DOC).tm $(DOC).sgml #----- HTML Files ----------------------------------------------------------- $(DOC).html : $(DOC).sgml $(SGML2HTML) $(DOC).sgml #----- TeX Files ------------------------------------------------------------ $(DOC).tex : $(DOC).sgml $(SGML2LATEX) $(DOC).sgml jed -script ./fixtex.sl $(DOC).tex #----- PDF Files ----------------------------------------------------------- $(DOC).pdf : $(DOC).tex $(MAKE) texclean $(PDFLATEX) $(DOC).tex $(PDFLATEX) $(DOC).tex $(PDFLATEX) $(DOC).tex #----- PS Files ----------------------------------------------------------- $(DOC).ps : $(DOC).tex texclean $(LATEX) $(DOC).tex $(LATEX) $(DOC).tex $(LATEX) $(DOC).tex dvips -o $(DOC).ps $(DOC).dvi #----- Text Files ----------------------------------------------------------- $(DOC).txt: $(DOC).sgml $(SGML2TXT) $(DOC).sgml #---------------------------------------------------------------------------- help-files: $(HLP_FILE) $(HLP_FILE): $(HLP_TM_FILE) $(HLPFUNS_TM) $(TMEXPAND) -I$(MACRODIR) $(HLP_TM_FILE) $(HLP_FILE) texclean: -rm -f *.dvi *.log *.aux *.toc *.out clean: texclean -rm -f *~ rtl/*.BAK rtl/*~ *.tmp distclean: clean -rm -f *.html *.ps $(HLP_FILE) $(TXT_FILES) $(TEX_FILES) $(SGML_FILES) $(PDF_FILES) install-txt-files: $(TXT_FILES) -mv $(TXT_FILES) ../text install: all $(PS_FILES) $(PDF_FILES) -mkdir $(SUBDIRS) -mv $(TXT_FILES) $(TEXTDIR) -mv *.html $(HTMLDIR) -mv $(PS_FILES) $(PSDIR) -mv $(SGML_FILES) $(SGMLDIR) -mv $(PDF_FILES) $(PDFDIR) -mv $(HLP_FILE) $(HELPDIR) pvm-0.1.5/doc/tm/fixtex.sl0000644002606100260610000000314007753241224015627 0ustar houckhouck00000000000000%quit_jed; !if (is_defined ("__argv")) { message ("You need a newer version of jed to run this script"); quit_jed (); } if (__argc != 4) { message ("Usage: jed -script fixtex.sl "); quit_jed (); } variable file = __argv[3]; () = read_file (file); % Patch up the >,< signs bob (); replace ("$<$", "<"); replace ("$>$", ">"); % It appears that sgml2tex screws up _for in section titles, producing \_{for}. replace ("ion\\_{", "ion{\\_"); % Make the first chapter a preface bob (); if (bol_fsearch ("\\chapter{Preface}")) { push_spot (); push_mark (); go_right (8); insert ("*"); % \chapter{ --> \chapter*{ () = bol_fsearch ("\\chapter{"); push_spot (); insert("\\tableofcontents\n"); eol (); insert ("\n\\pagenumbering{arabic}"); pop_spot (); narrow (); bob (); replace ("\\section{", "\\section*{"); widen (); if (bol_bsearch ("\\tableofcontents")) delete_line (); pop_spot (); if (bol_bsearch ("\\maketitle")) insert ("\\pagenumbering{roman}\n"); } static define fixup_urldefs () { % pdflatex cannot grok urldef bob (); while (bol_fsearch("\\urldef{") and ffind ("\\url{")) { variable line = line_as_string (); bol (); insert ("\\ifpdf\n"); deln (7); insert ("\\newcommand"); push_mark (); ()=ffind ("}"); variable macro = bufsubstr (); () = ffind ("\\url"); go_left (1); trim (); insert("{");eol(); insert("}"); insert ("\n\\else\n"); insert (line); newline (); %insert ("\\newcommand"); insert(macro); insert("}{}\n"); insert ("\\fi\n"); } } fixup_urldefs (); save_buffer (); quit_jed (); pvm-0.1.5/doc/tm/helpfile.tm0000644002606100260610000000015310240261330016074 0ustar houckhouck00000000000000#i slhlp.tm #d it#1 $1 #d tt#1 $1 #d file#1 \tt{$1} #i pvmfuns.tm #i pvm_msfuns.tm pvm-0.1.5/doc/tm/pvm.tm0000644002606100260610000004003710240112177015117 0ustar houckhouck00000000000000#% -*- mode: tm; mode: fold -*- #%{{{Macros #i linuxdoc.tm #d it#1 $1 #d slang \bf{S-lang} #d exmp#1 \tt{$1} #d var#1 \tt{$1} #d ivar#1 \tt{$1} #d ifun#1 \tt{$1} #d cvar#1 \tt{$1} #d cfun#1 \tt{$1} #d svar#1 \tt{$1} #d sfun#1 \tt{$1} #d icon#1 \tt{$1} #d chapter#1 $1

#d preface #d tag#1 $1 #d function#1 \sect{$1\label{$1}} #d variable#1 \sect{$1\label{$1}} #d function_sect#1 \sect{$1} #d begin_constant_sect#1 \sect{$1} #d constant#1 $1 #d end_constant_sect #d synopsis#1 Synopsis $1 #d keywords#1 Keywords $1 #d usage#1 Usage $1 #d description Description #d example Example #d notes Notes #d seealso#1 See Also \linuxdoc_list_to_ref{$1} #d done

#d -1 -1 #d 0 0 #d 1 1 #d 2 2 #d 3 3 #d 4 4 #d 5 5 #d 6 6 #d 7 7 #d 8 8 #d 9 9 #d NULL NULL #d documentstyle book #d iflatex#2 <#if output=latex2e>$1<#unless output=latex2e>$2 #d ifhtml#2 <#if output=html>$1<#unless output=html>$2 #%}}} #d module#1 \tt{$1} #d file#1 \tt{$1} #d slang-documentation \ \url{http://www.s-lang.org/doc/html/slang.html}{S-Lang documentation} #d pvm-documentation \url{http://www.csm.ornl.gov/pvm/}{PVM documentation} #d modules_home http://space.mit.edu/cxc/software/slang/modules #d hello_master_url \modules_home/pvm/examples/hello_master #d hello_slave_url \modules_home/pvm/examples/hello_slave #d master_url \modules_home/pvm/examples/master #d slave_url \modules_home/pvm/examples/slave #d hello_master \ifhtml{\url{\hello_master_url}{hello_master}}{hello_master} #d hello_slave \ifhtml{\url{\hello_master_url}{hello_slave}}{hello_slave} #d master \ifhtml{\url{\master_url}{master}}{master} #d slave \ifhtml{\url{\master_url}{slave}}{slave} \linuxdoc \begin{\documentstyle} \title S-Lang PVM Module Reference \author John C. Houck, \tt{houck@space.mit.edu} \date \__today__ \toc \chapter{Introduction to the PVM Module} PVM (Parallel Virtual Machine) is a software package which permits a heterogeneous collection of Unix and/or Windows computers, connected by a network, to be used as a single large parallel computer. The \module{PVM} module provides a \slang interface to this package. By performing distributed computations with \slang one can make better use of available computer resources yet still retain the advantages of programming in an interpreted language. This document briefly describes how to use the \slang interface to \module{PVM}. It assumes that the reader is already familiar with the PVM package itself. For complete details on obtaining, installing and using the PVM package, see the \pvm-documentation. Note that, once the PVM package is properly installed on your computer, the PVM \exmp{man} pages will provide detailed documentation on all the PVM library functions. Although the \slang \module{PVM} module functions often have slightly different interfaces, the differences are usually minor so the PVM documentation is quite helpful. Because the \slang interface is not yet fully documented, it will be necessary to consult the \module{PVM} documentation directly to make full use of the \slang \module{PVM} module. Because PVM processes require running programs on remote hosts, it is necessary to provide each host with the full path to the relevant executables. To simplify this process, it may be useful to create a directory, e.g.\exmp{$HOME/bin/PVM}, on every host and put relevant executables in that directory so that the same relative path will work on all machines. This PVM path may be specified in the \exmp{$HOME/.pvmhosts} configuration file; for a detailed description of the contents of this file, see the \exmp{pvmd} man page. The usage examples discussed in this manual assume that the PVM has already been initialized by running a command such as #v+ unix> pvm ~/.pvmhosts #v- This starts the PVM \it{console} and also starts the PVM daemon, \exmp{pvmd}, on each remote host. This daemon runs all PVM slave processes and handles all communications with the parent process and the rest of the PVM. The execution environment of the PVM slave processes is inherited from the corresponding \exmp{pvmd} process which, in turn, is inherited from the parent process which started the PVM \it{console}. However, it is sometimes useful to configure the environment of the remote \exmp{pvmd} process using a startup script, \exmp{$HOME/.pvmprofile}. This is a Bourne shell script which, if present, is run when \exmp{pvmd} is started. For a detailed description of the contents of this file, see the \exmp{pvmd} man page. \chapter{Using the PVM Module} To use the \module{PVM} module in a \slang script, it is first necessary to make the functions in the package known to the interpreter via #v+ () = evalfile ("pvm"); #v- or, if the application embedding the interpreter supports the \sfun{require} function, #v+ require ("pvm"); #v- may be used. If there is a namespace conflict between symbols in the script and those defined in the module, it may be necessary to load the PVM package into a namespace, e.g., #v+ () = evalfile ("pvm", "p"); #v- will place the PVM symbols into a namespace called \exmp{p}. Once the PVM module has been loaded, the functions it defines may be used in the usual way, e.g., #v+ require ("pvm"); . . variable master_tid = pvm_mytid (); #v- where \ifun{pvm_mytid} is the PVM function which returns the task identifier of the calling process. \chapter{Examples} This section presents examples of two alternate methods of using the PVM module. The source code for these examples is included in the \module{PVM} module source code distribution in the \file{examples} subdirectory. The first method uses PVM library routines to manage a simple distributed application. The second method uses the higher-level master-slave interface. This interface can provide a high degree of tolerance to failure of slave machines which proves useful in long-running distributed applications. \sect{Example 1: A Simple \it{Hello World} Program} In programming language tutorials, the first example is usually a program which simply prints out a message such as \it{Hello World} and then exits. The intent of such a trivial example is to illustrate all the steps involved in writing and running a program in that language. To write a \it{Hello World} program using the PVM module, we will write two programs, the master (\hello_master), and the slave (\hello_slave). The master process will spawn a slave process on different host and then wait for a message from that slave process. When the slave runs, it sends a message to the master, or parent, and then exits. For the purpose of this example, we will assume that the PVM consists of two hosts, named \exmp{vex} and \exmp{pirx}, and that the slave process will run on \exmp{pirx}. \sect1{The \file{hello_master} program} First, consider the master process, \hello_master. Conceptually, it must specify the full path to the slave executable and then send that information to the slave host (\exmp{pirx}). For this example, we assume that the master and slave executables are in the same directory and that the master process is started in that directory. With this assumption, we can construct the path to the slave executable using the \sfun{getcwd} and \sfun{path_concat} functions. We then send this information to the slave host using the \ifun{pvm_spawn} function: #v+ path = path_concat (getcwd(), "hello_slave"); slave_tid = pvm_spawn (path, PvmTaskHost, "pirx", 1); #v- The first argument to \ifun{pvm_spawn} specifies the full path to the slave executable. The second argument is a bit mask specifying options associated with spawning the slave process. The \icon{PvmTaskHost} option indicates that the slave process is to be started on a specific host. The third argument gives the name of the slave host and the last argument indicates how many copies of this process should be started. The return value of \ifun{pvm_spawn} is an array of task identifiers for each of the slave processes; negative values indicate that an error occurred. Having spawned the \hello_slave process on \exmp{pirx}, the master process calls the \ifun{pvm_recv} function to receive a message from the slave. #v+ bufid = pvm_recv (-1, -1); #v- The first argument to \ifun{pvm_recv} specifies the task identifier of the slave process expected to send the message and the second argument specifies the type of message that is expected. A slave task identifier \-1 means that a message from any slave will be accepted. Similarly, a message identifier of \-1 means that any type of message will be accepted. In this example, we could have specified the slave task id and the message identifier explicitly: #v+ bufid = pvm_recv (slave_tid, 1); #v- When a suitable message is received, the contents of the message are stored in a PVM buffer and \ifun{pvm_recv} returns the buffer identifier which may be used by the PVM application to retrieve the contents of the buffer. Retrieving the contents of the buffer normally requires knowing the format in which the information is stored. In this case, because we accepted all types of messages from the slave, we may need to examine the message buffer to find out what kind of message was actually recieved. The \ifun{pvm_bufinfo} function is used to obtain information about the contents of the buffer. #v+ (,msgid,) = pvm_bufinfo (bufid); #v- Given the buffer identifier, \ifun{pvm_bufinfo} returns the number of bytes, the message identifier and the task identifer sending the message. Because we know that the slave process sent a single object of \svar{Struct_Type}, we retrieve it by calling the \ifun{pvm_recv_obj} function. #v+ variable obj = pvm_recv_obj(); vmessage ("%s says %s", obj.from, obj.msg); #v- This function is not part of the PVM package but is a higher level function provided by the \module{PVM} module. It simplifies the process of sending \slang objects between hosts by handling some of the bookkeeping required by the lower level PVM interface. Having retrieved a \slang object from the message buffer, we can then print out the message. Running \hello_master, we see: #v+ vex> ./hello_master pirx says Hello World #v- Note that before exiting, all PVM processes should call the \ifun{pvm_exit} function to inform the \file{pvmd} daemon of the change in PVM status. #v+ pvm_exit(); exit(0); #v- At this point, the script may exit normally. \sect1{The \file{hello_slave} program} Now, consider the slave process, \hello_slave. Conceptually, it must first determine the location of its parent process, then create and send a message to that process. The task identifier of the parent process is obtained using the \ifun{pvm_parent} function. #v+ variable ptid = pvm_parent(); #v- For this example, we will send a message consisting of a \slang structure with two fields, one containing the name of the slave host and the other containing the string \exmp{"Hello World"}. We use the \ifun{pvm_send_obj} function to send this this message because it automatically handles packaging all the separate structure fields into a PVM message buffer and also sends along the structure field names and data types so that the structure can be automatically re-assembled by the receiving process. This makes it possible to write code which transparently sends \slang objects from one host to another. To create and send the structure: #v+ variable s = struct {msg, from}; s.msg = "Hello World"; s.from = getenv ("HOST"); pvm_send_obj (ptid, 1, s); #v- The first argument to \ifun{pvm_send_obj} specifies the task identifier of the destination process, the second argument is a message identifier which is used to indicate what kind of message has been sent. The remaining arguments contain the data objects to be included in the message. Having sent a message to the parent process, the slave process then calls \ifun{pvm_exit} to inform the \file{pvmd} daemon that its work is complete. This allows \file{pvmd} to notify the parent process that a slave process has exited. The slave then exits normally. \sect{Example 2: Using the Master-Slave Interface} The \module{PVM} module provides a higher level interface to support the master-slave paradigm for distributed computations. The symbols associated with this interface have the \exmp{pvm_ms} prefix to distinguish them from those symbols associated with the PVM package itself. The \exmp{pvm_ms} interface provides a means for handling computations which consist of a predetermined list of tasks which can be performed by running arbitrary slave processes which take command-line arguments. The interface provides a high degree of robustness, allowing one to add or delete hosts from the PVM while the distributed process is running and also ensuring that the task list will be completed even if one or more slave hosts fail (e.g. crash) during the computation. Experience has shown that this failure tolerance is surprisingly important. Long-running distributed computations experience failure of one or more hosts with surprising frequency and it is essential that such failures do not require restarting the entire distributed computation from the beginning. Scripts using this interface must initialize it by loading the \exmp{pvm_ms} package via, e.g. #v+ require ("pvm_ms"); #v- As an example of how to use this interface, we examine the scripts \master and \slave. \sect1{The \file{master} program} The \master script first builds a list of tasks each consisting of an array of strings which provide the command line for each slave process that will be spawned on the PVM. For this simple example, the same command line will be executed a specified number of times. First, the script constructs the path to the \slave executable, (\var{Slave_Pgm}), and then the command line (\var{Cmd}), that each \slave instance will invoke. Then the array of tasks is constructed: #v+ variable pgm_argvs = Array_Type[N]; variable pgm_argv = [Slave_Pgm, Cmd]; pgm_argvs[*] = pgm_argv; #v- The distribution of these tasks across the available PVM is automatically handled by the \exmp{pvm_ms} interface. The interface will simultaneously start as many tasks as possible up to some maximum number of processes per host. Here we specify that a maximum of two processes per host may run simultaneously and then submit the list of tasks to the PVM: #v+ pvm_ms_set_num_processes_per_host (2); exit_status = pvm_ms_run_master (pgm_argvs); #v- As each slave process is completed, its exit status is recorded along with any messages printed to \var{stdout} during the execution. When the entire list of tasks is complete, an array of structures is returned containing status information for each task that was executed. In this example, the \master process simply prints out this information. \sect1{The \file{slave} program} The \slave process in this example is relatively simple. Its command line arguments provide the task to be completed. These arguments are then passed to \ifun{pvm_ms_run_slave} #v+ pvm_ms_run_slave (__argv[[1:]]); #v- which spawns a subshell, runs the specified command, communicates the task completion status to the parent process and exits. \chapter{Master-Slave Function Reference} #i pvm_msfuns.tm \chapter{PVM Module Function Reference} #i pvmfuns.tm \chapter{Module Symbols Lacking Documentation} Although many more low-level PVM intrinsic functions are provided by the S-Lang module, not all of S-Lang interfaces have been documented. See the PVM documentation for information on the following functions: #v+ #i pvm_undoc.tm #v- Similarly, the following PVM intrinsic constants are provided by the S-Lang module but are documented only through the PVM documentation. #v+ #i pvm_undoc_const.tm #v- \end{\documentstyle} pvm-0.1.5/doc/tm/pvm_msfuns.tm0000644002606100260610000001725507754160572016542 0ustar houckhouck00000000000000\function{pvm_ms_kill} \synopsis{Send a "task complete" message to a specific task} \usage{pvm_ms_kill (Int_Type mtid, Int_Type stid)} \description This function may be used to send a "task complete" message to a specific PVM process. The first argument gives the task identifier of the destination process. The second argument gives the task identifier of the sending process. \example #v+ tid = pvm_mytid (); ptid = pvm_parent (); pvm_ms_kill (ptid, tid); #v- \seealso{pvm_ms_slave_exit} \done \function{pvm_ms_set_num_processes_per_host} \synopsis{Set the maximum number of simultaneous processes per host} \usage{pvm_ms_set_num_processes_per_host (Int_Type num_processes)} \description This function is used to set the maximum number of simultaneous processes per host. The master process normally runs as many simultaneous processes as possible; by setting the maximum number of simultaneous processes per host, one can limit the processing load per host. \example #v+ pvm_ms_set_num_processes_per_host (2); #v- \seealso{pvm_ms_run_master} \done \function{pvm_ms_set_debug} \synopsis{Set the debug flag} \usage{pvm_ms_set_debug (Int_Type debug)} \description This function may be used to control whether debugging information is printed out during execution. Debugging information is printed if the flag is non-zero. \example #v+ pvm_ms_set_debug (1); #v- \seealso{pvm_ms_set_num_processes_per_host} \done \function{pvm_ms_slave_exit} \synopsis{Cause a normal exit of a slave process from the PVM} \usage{pvm_ms_slave_exit (Int_Type exit_status)} \description To exit the PVM, a slave process calls this function to send its exit status to the parent process and to notify the local \file{pvmd} of its exit. \example #v+ pvm_ms_slave_exit (exit_status); #v- \seealso{pvm_ms_run_slave} \done \function{pvm_ms_run_slave} \synopsis{Execute the slave's assigned task in a subshell, then exit the PVM} \usage{pvm_ms_run_slave (String_Type argv[])} \description A slave process calls this function to run a command in a subshell and then exit the PVM. The command line is constructed by concatenting the elements of an array of strings, \var{argv}, delimited by spaces. The integer return value from the \sfun{system} call provides the exit status for the slave process. After sending this value to its parent process, the slave notifies the PVM and exits. \example #v+ pvm_ms_run_slave (argv); #v- \seealso{pvm_ms_slave_exit} \done \function{pvm_ms_run_master} \synopsis{Submit a list of tasks to the PVM} \usage{Struct_Type exit_status[] = pvm_ms_run_master (String_Type pgms[])} \description This function is used to submit a managed list of tasks to the PVM. The task list manager will try to ensure that all tasks are completed and, upon completion of the task list, will return an array of structures containing information about the results of each task. \example To run the Unix command \it{ps xu} on a number of different hosts: #v+ variable slave_argv = Array_Type[n]; slave_argv[*] = ["ps", "axu"]; exit_status = pvm_ms_run_master (slave_argv); #v- \seealso{pvm_ms_add_new_slave} \done \function{pvm_ms_add_new_slave} \synopsis{Add a new slave to the managed list} \usage{pvm_ms_add_new_slave (String_Type argv[])} \description This function may be used to add a new slave process while pvm_ms_run_master() is running, usually as a result of handling a message. \example #v+ pvm_ms_add_new_slave ("vex"); #v- \seealso{pvm_ms_run_master} \done \function{pvm_ms_set_message_callback} \synopsis{Set a callback for handling user-defined messages} \usage{pvm_ms_set_message_callback (Ref_Type func)} \description This function may be used to handle user-defined messages be sent from slave processes back to the master process. \example #v+ static define handle_user_message (msgid, tid) { switch (msgid) { case USER_SLAVE_RESULT: recv_results (tid); start_task (tid); } { case USER_SLAVE_READY: start_task (tid); } { % default: return 0; } return 1; } pvm_ms_set_message_callback (&handle_user_message); #v- \seealso{pvm_ms_set_idle_host_callback, pvm_ms_set_slave_exit_failed_callback} \done \function{pvm_ms_set_slave_exit_failed_callback} \synopsis{Set a hook to be called when a slave exits on failure} \usage{pvm_ms_set_slave_exit_failed_callback (Ref_Type func)} \description This function may be used to have the master process perform a specified action whenever a slave process exits without having completed its assigned task. This is primarily useful in the context where each command-line submitted to \ifun{pvm_ms_run_master} represents a task which itself communicates with the PVM, performing potentially many additional tasks which are independently managed by the process that called \ifun{pvm_ms_run_master}. For example, consider a case in which initialization of slave processes is very expensive but, once initialized, a single slave process may perform many tasks. In this case, the master process may spawn a small number of slaves and then repeatedly send each slave a task to perform. Each slave performs its task, sends the result to the master, and then waits for another task. The managing process must keep track of which tasks have been completed and which remain. If a slave exits while working on a task, it is important that the manager process be notified that that task in progress was not completed and that it should be reassigned to another slave. \example #v+ static define slave_exit_failed_callback (msgid, tid) { variable t = find_task_tid (tid); if (orelse {t == NULL} {t.status == FINISHED}) return; % mark the unfinished task "READY" so that it will % be assigned to another slave t.tid = -1; t.status = READY; } pvm_ms_set_slave_exit_failed_callback (&slave_exit_failed_callback); #v- \seealso{pvm_ms_set_message_callback} \done \function{pvm_ms_set_slave_spawned_callback} \synopsis{Set the slave spawned callback hook} \usage{pvm_ms_set_slave_spawned_callback (Ref_Type func)} \description This function may be used to specify a callback function to be called whenever a slave process has been spawned. The callback function will be called with three arguments: the slave task id, the name of the host running the slave process, and an array of strings representing the argument list passed to the slave. \example #v+ static define slave_spawned_callback (tid, host, argv) { vmessage ("Slave running %s spawned on %s with task-id %d", argv[0], host, tid); } pvm_ms_set_slave_spawned_callback (&slave_spawned_callback); #v- \seealso{pvm_ms_set_message_callback} \done \function{pvm_ms_set_idle_host_callback} \synopsis{Set the idle host hook} \usage{pvm_ms_set_idle_host_callback (Ref_Type func)} \description This function may be used to specify a callback function to be called whenever a new host is added to the virtual machine. \example #v+ static define idle_host_callback () { loop (Max_Num_Processes_Per_Host) { variable slave_argv = build_slave_argv (0); pvm_ms_add_new_slave (slave_argv); } } pvm_ms_set_idle_host_callback (&idle_host_callback); #v- \seealso{pvm_ms_set_message_callback} \done \function{pvm_ms_set_hosts} \synopsis{Set list of hosts to use} \usage{pvm_ms_set_hosts (String_Type hosts[])} \description This function may be used to specify which hosts will be used to perform distributed calculations. The default is to use all hosts in the current PVM. \example #v+ pvm_ms_set_hosts (["vex", "pirx", "aluche"]); #v- \seealso{pvm_addhosts} \done pvm-0.1.5/doc/tm/pvm_undoc.tm0000644002606100260610000000104010043326572016305 0ustar houckhouck00000000000000pvm_delhost pvm_export pvm_freebuf pvm_freecontext pvm_getcontext pvm_newcontext pvm_setcontext pvm_getopt pvm_nrecv pvm_sendsig pvm_tidtohost pvm_setopt pvm_config pvm_getrbuf pvm_getsbuf pvm_halt pvm_tasks pvm_kill pvm_mstat pvm_pstat pvm_mcast pvm_addhost pvm_archcode pvm_probe pvm_bufinfo pvm_notify pvm_unpack pvm_send pvm_recv pvm_pack pvm_initsend pvm_exit pvm_mytid pvm_parent pvm_spawn pvm_barrier pvm_getinst pvm_bcast pvm_gettid pvm_gsize pvm_joingroup pvm_lvgroup pvm_settmask pvm_tev_mask_init pvm_tev_mask_set pvm_sigterm_enable pvm-0.1.5/doc/tm/pvm_undoc_const.tm0000644002606100260610000000244410043326572017524 0ustar houckhouck00000000000000PvmDataDefault PvmDataRaw PvmDataInPlace PvmDataTrace PvmTaskDefault PvmTaskHost PvmTaskArch PvmTaskDebug PvmTaskTrace PvmMppFront PvmHostCompl PvmNoSpawnParent PvmTaskExit PvmHostDelete PvmHostAdd PvmRouteAdd PvmRouteDelete PvmNotifyCancel PvmRoute PvmDontRoute PvmAllowDirect PvmRouteDirect PvmDebugMask PvmAutoErr PvmOutputTid PvmOutputCode PvmTraceTid PvmTraceCode PvmTraceBuffer PvmTraceOptions PvmTraceFull PvmTraceTime PvmTraceCount PvmFragSize PvmResvTids PvmSelfOutputTid PvmSelfOutputCode PvmSelfTraceTid PvmSelfTraceCode PvmSelfTraceBuffer PvmSelfTraceOptions PvmShowTids PvmPollType PvmPollConstant PvmPollSleep PvmPollTime PvmOutputContext PvmTraceContext PvmSelfOutputContext PvmSelfTraceContext PvmNoReset PvmTaskSelf PvmTaskChild PvmBaseContext PvmMboxDefault PvmMboxPersistent PvmMboxMultiInstance PvmMboxOverWritable PvmMboxFirstAvail PvmMboxReadAndDelete PvmMboxWaitForInfo PvmOk PvmBadParam PvmMismatch PvmOverflow PvmNoData PvmNoHost PvmNoFile PvmDenied PvmNoMem PvmBadMsg PvmSysErr PvmNoBuf PvmNoSuchBuf PvmNullGroup PvmDupGroup PvmNoGroup PvmNotInGroup PvmNoInst PvmHostFail PvmNoParent PvmNotImpl PvmDSysErr PvmBadVersion PvmOutOfRes PvmDupHost PvmCantStart PvmAlready PvmNoTask PvmNotFound PvmExists PvmHostrNMstr PvmParentNotSet PvmNoEntry PvmDupEntry TEV_MCAST TEV_SEND TEV_RECV TEV_NRECV pvm-0.1.5/doc/tm/pvmfuns.tm0000644002606100260610000000727007754160572016037 0ustar houckhouck00000000000000\function{pvm_send_obj} \synopsis{Pack and send data objects} \usage{pvm_send (Int_Type tid, Int_Type msgid, object [,...])} \description This function is much like \var{pvm_psend} except that it sends additional type information with each object. Using this function paired with \var{pvm_recv_obj} simplifies sending aggregate data objects such as structures and removes the need for the receiver to specify datatypes explicitly. \example To send a \slang structure to another process: #v+ variable obj = struct {name, x, y, data}; ... pvm_send_obj (tid, msgid, obj); #v- \seealso{pvm_recv_obj, pvm_psend, pvm_unpack} \done \function{pvm_recv_obj} \synopsis{Receive data objects from \var{pvm_send_obj}} \usage{obj = pvm_recv_obj ()} \description This function receives an object sent by \var{pvm_send_obj} and returns a slang object of the same type that was sent. It simplifies sending aggregate data types such as structures. \example To receive a \slang object sent by another process via \ifun{pvm_send_obj}: #v+ obj = pvm_recv_obj (); #v- \seealso{pvm_send_obj, pvm_psend, pvm_unpack} \done \function{pvm_config} \synopsis{Returns information about the present virtual machine configuration} \usage{Struct_Type = pvm_config ()} \description See the PVM documentation. \example #v+ h = pvm_config (); #v- \seealso{pvm_kill} \done \function{pvm_kill} \synopsis{Terminates a specified PVM process} \usage{pvm_kill (Int_Type tid)} \description See the PVM documentation. \example #v+ pvm_kill (tid); #v- \seealso{pvm_config} \done \function{pvm_initsend} \synopsis{Clear default send buffer and specify message encoding} \usage{bufid = pvm_initsend (Int_Type encoding)} \description See the PVM documentation. \example #v+ bufid = pvm_initsend (PvmDataDefault); #v- \seealso{pvm_send} \done \function{pvm_pack} \synopsis{Pack the active message buffer with arrays of prescribed data type} \usage{pvm_pack (object)} \description See the PVM documentation. \example #v+ pvm_pack (x); #v- \seealso{pvm_unpack} \done \function{pvm_send} \synopsis{Immediately sends the data in the active message buffer} \usage{pvm_send (Int_Type, tid, Int_Type msgid)} \description See the PVM documentation. \example #v+ pvm_send (tid, msgid); #v- \seealso{pvm_recv} \done \function{pvm_recv} \synopsis{Receive a message} \usage{bufid = pvm_recv (Int_Type tid, Int_Type msgtag)} \description See the PVM documentation. \example #v+ bufid = pvm_recv (tid, msgtag); #v- \seealso{pvm_send} \done \function{pvm_unpack} \synopsis{Unpack the active message buffer into arrays of prescribed data type} \usage{item = pvm_unpack (Int_Type type_id, Int_Type num)} \description See the PVM documentation. \example #v+ item = pvm_unpack (type, num); #v- \seealso{pvm_pack} \done \function{pvm_psend} \synopsis{Pack and send data} \usage{pvm_psend (Int_Type tid, Int_Type msgid, object [,...])} \description See the PVM documentation. \example #v+ pvm_psend (tid, msgid, data); #v- \notes Unlike the \var{pvm_send} function in the PVM library, this function does not operate asynchronously. \seealso{pvm_send, pvm_initsend, pvm_pack, pvm_recv} \done \function{pvm_addhosts} \synopsis{Add one or more hosts to the PVM server} \usage{Int_Type[] = pvm_addhosts (String_Type[] hosts)} \description See the PVM documentation. \example #v+ tids = pvm_addhosts (["vex", "verus", "aluche"]); #v- \seealso{pvm_addhosts, pvm_config, pvm_delhosts} \done \function{pvm_delhosts} \synopsis{Delete one or more hosts from the PVM server} \usage{pvm_delhosts (String_Type[] hosts)} \description See the PVM documentation. \example #v+ pvm_delhosts (["vex", "verus"]); #v- \seealso{pvm_delhosts, pvm_config, pvm_kill} \done pvm-0.1.5/doc/text/0000755002606100260610000000000010330414315014312 5ustar houckhouck00000000000000pvm-0.1.5/doc/text/pvm.txt0000644002606100260610000010410710330414270015660 0ustar houckhouck00000000000000 S-Lang PVM Module Reference John C. Houck, houck@space.mit.edu Oct 28, 2005 ____________________________________________________________ Table of Contents Introduction to the PVM Module Using the PVM Module Examples 1. Example 1: A Simple Hello World Program 1.1 The hello_master program 1.2 The hello_slave program 2. Example 2: Using the Master-Slave Interface 2.1 The master program 2.2 The slave program 2.2 Master-Slave Function Reference 3. pvm_ms_kill 4. pvm_ms_set_num_processes_per_host 5. pvm_ms_set_debug 6. pvm_ms_slave_exit 7. pvm_ms_run_slave 8. pvm_ms_run_master 9. pvm_ms_add_new_slave 10. pvm_ms_set_message_callback 11. pvm_ms_set_slave_exit_failed_callback 12. pvm_ms_set_slave_spawned_callback 13. pvm_ms_set_idle_host_callback 14. pvm_ms_set_hosts 14. PVM Module Function Reference 15. pvm_send_obj 16. pvm_recv_obj 17. pvm_config 18. pvm_kill 19. pvm_initsend 20. pvm_pack 21. pvm_send 22. pvm_recv 23. pvm_unpack 24. pvm_psend 25. pvm_addhosts 26. pvm_delhosts 26. Module Symbols Lacking Documentation ______________________________________________________________________ 1. Introduction to the PVM Module PVM (Parallel Virtual Machine) is a software package which permits a heterogeneous collection of Unix and/or Windows computers, connected by a network, to be used as a single large parallel computer. The PVM module provides a S-lang interface to this package. By performing distributed computations with S-lang one can make better use of available computer resources yet still retain the advantages of programming in an interpreted language. This document briefly describes how to use the S-lang interface to PVM. It assumes that the reader is already familiar with the PVM package itself. For complete details on obtaining, installing and using the PVM package, see the PVM documentation . Note that, once the PVM package is properly installed on your computer, the PVM man pages will provide detailed documentation on all the PVM library functions. Although the S-lang PVM module functions often have slightly different interfaces, the differences are usually minor so the PVM documentation is quite helpful. Because the S-lang interface is not yet fully documented, it will be necessary to consult the PVM documentation directly to make full use of the S-lang PVM module. Because PVM processes require running programs on remote hosts, it is necessary to provide each host with the full path to the relevant executables. To simplify this process, it may be useful to create a directory, e.g.$HOME/bin/PVM, on every host and put relevant executables in that directory so that the same relative path will work on all machines. This PVM path may be specified in the $HOME/.pvmhosts configuration file; for a detailed description of the contents of this file, see the pvmd man page. The usage examples discussed in this manual assume that the PVM has already been initialized by running a command such as unix> pvm ~/.pvmhosts This starts the PVM console and also starts the PVM daemon, pvmd, on each remote host. This daemon runs all PVM slave processes and han- dles all communications with the parent process and the rest of the PVM. The execution environment of the PVM slave processes is inherited from the corresponding pvmd process which, in turn, is inherited from the parent process which started the PVM console. However, it is sometimes useful to configure the environment of the remote pvmd process using a startup script, $HOME/.pvmprofile. This is a Bourne shell script which, if present, is run when pvmd is started. For a detailed description of the contents of this file, see the pvmd man page. 2. Using the PVM Module To use the PVM module in a S-lang script, it is first necessary to make the functions in the package known to the interpreter via () = evalfile ("pvm"); or, if the application embedding the interpreter supports the require function, require ("pvm"); may be used. If there is a namespace conflict between symbols in the script and those defined in the module, it may be necessary to load the PVM package into a namespace, e.g., () = evalfile ("pvm", "p"); will place the PVM symbols into a namespace called p. Once the PVM module has been loaded, the functions it defines may be used in the usual way, e.g., require ("pvm"); . . variable master_tid = pvm_mytid (); where pvm_mytid is the PVM function which returns the task identifier of the calling process. 3. Examples This section presents examples of two alternate methods of using the PVM module. The source code for these examples is included in the PVM module source code distribution in the examples subdirectory. The first method uses PVM library routines to manage a simple distributed application. The second method uses the higher-level master-slave interface. This interface can provide a high degree of tolerance to failure of slave machines which proves useful in long-running distributed applications. 3.1. Example 1: A Simple Hello World Program In programming language tutorials, the first example is usually a program which simply prints out a message such as Hello World and then exits. The intent of such a trivial example is to illustrate all the steps involved in writing and running a program in that language. To write a Hello World program using the PVM module, we will write two programs, the master (hello_master), and the slave (hello_slave). The master process will spawn a slave process on different host and then wait for a message from that slave process. When the slave runs, it sends a message to the master, or parent, and then exits. For the purpose of this example, we will assume that the PVM consists of two hosts, named vex and pirx, and that the slave process will run on pirx. 3.1.1. The hello_master program First, consider the master process, hello_master. Conceptually, it must specify the full path to the slave executable and then send that information to the slave host (pirx). For this example, we assume that the master and slave executables are in the same directory and that the master process is started in that directory. With this assumption, we can construct the path to the slave executable using the getcwd and path_concat functions. We then send this information to the slave host using the pvm_spawn function: path = path_concat (getcwd(), "hello_slave"); slave_tid = pvm_spawn (path, PvmTaskHost, "pirx", 1); The first argument to pvm_spawn specifies the full path to the slave executable. The second argument is a bit mask specifying options associated with spawning the slave process. The PvmTaskHost option indicates that the slave process is to be started on a specific host. The third argument gives the name of the slave host and the last argu- ment indicates how many copies of this process should be started. The return value of pvm_spawn is an array of task identifiers for each of the slave processes; negative values indicate that an error occurred. Having spawned the hello_slave process on pirx, the master process calls the pvm_recv function to receive a message from the slave. bufid = pvm_recv (-1, -1); The first argument to pvm_recv specifies the task identifier of the slave process expected to send the message and the second argument specifies the type of message that is expected. A slave task identi- fier -1 means that a message from any slave will be accepted. Simi- larly, a message identifier of -1 means that any type of message will be accepted. In this example, we could have specified the slave task id and the message identifier explicitly: bufid = pvm_recv (slave_tid, 1); When a suitable message is received, the contents of the message are stored in a PVM buffer and pvm_recv returns the buffer identifier which may be used by the PVM application to retrieve the contents of the buffer. Retrieving the contents of the buffer normally requires knowing the format in which the information is stored. In this case, because we accepted all types of messages from the slave, we may need to examine the message buffer to find out what kind of message was actually recieved. The pvm_bufinfo function is used to obtain information about the contents of the buffer. (,msgid,) = pvm_bufinfo (bufid); Given the buffer identifier, pvm_bufinfo returns the number of bytes, the message identifier and the task identifer sending the message. Because we know that the slave process sent a single object of Struct_Type, we retrieve it by calling the pvm_recv_obj function. variable obj = pvm_recv_obj(); vmessage ("%s says %s", obj.from, obj.msg); This function is not part of the PVM package but is a higher level function provided by the PVM module. It simplifies the process of sending S-lang objects between hosts by handling some of the bookkeep- ing required by the lower level PVM interface. Having retrieved a S- lang object from the message buffer, we can then print out the mes- sage. Running hello_master, we see: vex> ./hello_master pirx says Hello World Note that before exiting, all PVM processes should call the pvm_exit function to inform the pvmd daemon of the change in PVM status. pvm_exit(); exit(0); At this point, the script may exit normally. 3.1.2. The hello_slave program Now, consider the slave process, hello_slave. Conceptually, it must first determine the location of its parent process, then create and send a message to that process. The task identifier of the parent process is obtained using the pvm_parent function. variable ptid = pvm_parent(); For this example, we will send a message consisting of a S-lang struc- ture with two fields, one containing the name of the slave host and the other containing the string "Hello World". We use the pvm_send_obj function to send this this message because it automatically handles packaging all the separate structure fields into a PVM message buffer and also sends along the structure field names and data types so that the structure can be automatically re-assembled by the receiving process. This makes it possible to write code which transparently sends S-lang objects from one host to another. To create and send the structure: variable s = struct {msg, from}; s.msg = "Hello World"; s.from = getenv ("HOST"); pvm_send_obj (ptid, 1, s); The first argument to pvm_send_obj specifies the task identifier of the destination process, the second argument is a message identifier which is used to indicate what kind of message has been sent. The remaining arguments contain the data objects to be included in the message. Having sent a message to the parent process, the slave process then calls pvm_exit to inform the pvmd daemon that its work is complete. This allows pvmd to notify the parent process that a slave process has exited. The slave then exits normally. 3.2. Example 2: Using the Master-Slave Interface The PVM module provides a higher level interface to support the master-slave paradigm for distributed computations. The symbols associated with this interface have the pvm_ms prefix to distinguish them from those symbols associated with the PVM package itself. The pvm_ms interface provides a means for handling computations which consist of a predetermined list of tasks which can be performed by running arbitrary slave processes which take command-line arguments. The interface provides a high degree of robustness, allowing one to add or delete hosts from the PVM while the distributed process is running and also ensuring that the task list will be completed even if one or more slave hosts fail (e.g. crash) during the computation. Experience has shown that this failure tolerance is surprisingly important. Long-running distributed computations experience failure of one or more hosts with surprising frequency and it is essential that such failures do not require restarting the entire distributed computation from the beginning. Scripts using this interface must initialize it by loading the pvm_ms package via, e.g. require ("pvm_ms"); As an example of how to use this interface, we examine the scripts master and slave. 3.2.1. The master program The master script first builds a list of tasks each consisting of an array of strings which provide the command line for each slave process that will be spawned on the PVM. For this simple example, the same command line will be executed a specified number of times. First, the script constructs the path to the slave executable, (Slave_Pgm), and then the command line (Cmd), that each slave instance will invoke. Then the array of tasks is constructed: variable pgm_argvs = Array_Type[N]; variable pgm_argv = [Slave_Pgm, Cmd]; pgm_argvs[*] = pgm_argv; The distribution of these tasks across the available PVM is automatically handled by the pvm_ms interface. The interface will simultaneously start as many tasks as possible up to some maximum number of processes per host. Here we specify that a maximum of two processes per host may run simultaneously and then submit the list of tasks to the PVM: pvm_ms_set_num_processes_per_host (2); exit_status = pvm_ms_run_master (pgm_argvs); As each slave process is completed, its exit status is recorded along with any messages printed to stdout during the execution. When the entire list of tasks is complete, an array of structures is returned containing status information for each task that was executed. In this example, the master process simply prints out this information. 3.2.2. The slave program The slave process in this example is relatively simple. Its command line arguments provide the task to be completed. These arguments are then passed to pvm_ms_run_slave pvm_ms_run_slave (__argv[[1:]]); which spawns a subshell, runs the specified command, communicates the task completion status to the parent process and exits. 4. Master-Slave Function Reference 4.1. pvm_ms_kill Synopsis Send a "task complete" message to a specific task Usage pvm_ms_kill (Int_Type mtid, Int_Type stid) Description This function may be used to send a "task complete" message to a specific PVM process. The first argument gives the task identifier of the destination process. The second argument gives the task identifier of the sending process. Example tid = pvm_mytid (); ptid = pvm_parent (); pvm_ms_kill (ptid, tid); See Also ``pvm_ms_slave_exit'' 4.2. pvm_ms_set_num_processes_per_host Synopsis Set the maximum number of simultaneous processes per host Usage pvm_ms_set_num_processes_per_host (Int_Type num_processes) Description This function is used to set the maximum number of simultaneous processes per host. The master process normally runs as many simultaneous processes as possible; by setting the maximum number of simultaneous processes per host, one can limit the processing load per host. Example pvm_ms_set_num_processes_per_host (2); See Also ``pvm_ms_run_master'' 4.3. pvm_ms_set_debug Synopsis Set the debug flag Usage pvm_ms_set_debug (Int_Type debug) Description This function may be used to control whether debugging information is printed out during execution. Debugging information is printed if the flag is non-zero. Example pvm_ms_set_debug (1); See Also ``pvm_ms_set_num_processes_per_host'' 4.4. pvm_ms_slave_exit Synopsis Cause a normal exit of a slave process from the PVM Usage pvm_ms_slave_exit (Int_Type exit_status) Description To exit the PVM, a slave process calls this function to send its exit status to the parent process and to notify the local pvmd of its exit. Example pvm_ms_slave_exit (exit_status); See Also ``pvm_ms_run_slave'' 4.5. pvm_ms_run_slave Synopsis Execute the slave's assigned task in a subshell, then exit the PVM Usage pvm_ms_run_slave (String_Type argv[]) Description A slave process calls this function to run a command in a subshell and then exit the PVM. The command line is constructed by concatenting the elements of an array of strings, argv, delimited by spaces. The integer return value from the system call provides the exit status for the slave process. After sending this value to its parent process, the slave notifies the PVM and exits. Example pvm_ms_run_slave (argv); See Also ``pvm_ms_slave_exit'' 4.6. pvm_ms_run_master Synopsis Submit a list of tasks to the PVM Usage Struct_Type exit_status[] = pvm_ms_run_master (String_Type pgms[]) Description This function is used to submit a managed list of tasks to the PVM. The task list manager will try to ensure that all tasks are completed and, upon completion of the task list, will return an array of structures containing information about the results of each task. Example To run the Unix command ps xu on a number of different hosts: variable slave_argv = Array_Type[n]; slave_argv[*] = ["ps", "axu"]; exit_status = pvm_ms_run_master (slave_argv); See Also ``pvm_ms_add_new_slave'' 4.7. pvm_ms_add_new_slave Synopsis Add a new slave to the managed list Usage pvm_ms_add_new_slave (String_Type argv[]) Description This function may be used to add a new slave process while pvm_ms_run_master() is running, usually as a result of handling a message. Example pvm_ms_add_new_slave ("vex"); See Also ``pvm_ms_run_master'' 4.8. pvm_ms_set_message_callback Synopsis Set a callback for handling user-defined messages Usage pvm_ms_set_message_callback (Ref_Type func) Description This function may be used to handle user-defined messages be sent from slave processes back to the master process. Example static define handle_user_message (msgid, tid) { switch (msgid) { case USER_SLAVE_RESULT: recv_results (tid); start_task (tid); } { case USER_SLAVE_READY: start_task (tid); } { % default: return 0; } return 1; } pvm_ms_set_message_callback (&handle_user_message); See Also ``pvm_ms_set_idle_host_callback'', ``pvm_ms_set_slave_exit_failed_callback'' 4.9. pvm_ms_set_slave_exit_failed_callback Synopsis Set a hook to be called when a slave exits on failure Usage pvm_ms_set_slave_exit_failed_callback (Ref_Type func) Description This function may be used to have the master process perform a specified action whenever a slave process exits without having completed its assigned task. This is primarily useful in the context where each command-line submitted to pvm_ms_run_master represents a task which itself communicates with the PVM, performing potentially many additional tasks which are independently managed by the process that called pvm_ms_run_master. For example, consider a case in which initialization of slave processes is very expensive but, once initialized, a single slave process may perform many tasks. In this case, the master process may spawn a small number of slaves and then repeatedly send each slave a task to perform. Each slave performs its task, sends the result to the master, and then waits for another task. The managing process must keep track of which tasks have been completed and which remain. If a slave exits while working on a task, it is important that the manager process be notified that that task in progress was not completed and that it should be reassigned to another slave. Example static define slave_exit_failed_callback (msgid, tid) { variable t = find_task_tid (tid); if (orelse {t == NULL} {t.status == FINISHED}) return; % mark the unfinished task "READY" so that it will % be assigned to another slave t.tid = -1; t.status = READY; } pvm_ms_set_slave_exit_failed_callback (&slave_exit_failed_callback); See Also ``pvm_ms_set_message_callback'' 4.10. pvm_ms_set_slave_spawned_callback Synopsis Set the slave spawned callback hook Usage pvm_ms_set_slave_spawned_callback (Ref_Type func) Description This function may be used to specify a callback function to be called whenever a slave process has been spawned. The callback function will be called with three arguments: the slave task id, the name of the host running the slave process, and an array of strings representing the argument list passed to the slave. Example static define slave_spawned_callback (tid, host, argv) { vmessage ("Slave running %s spawned on %s with task-id %d", argv[0], host, tid); } pvm_ms_set_slave_spawned_callback (&slave_spawned_callback); See Also ``pvm_ms_set_message_callback'' 4.11. pvm_ms_set_idle_host_callback Synopsis Set the idle host hook Usage pvm_ms_set_idle_host_callback (Ref_Type func) Description This function may be used to specify a callback function to be called whenever a new host is added to the virtual machine. Example static define idle_host_callback () { loop (Max_Num_Processes_Per_Host) { variable slave_argv = build_slave_argv (0); pvm_ms_add_new_slave (slave_argv); } } pvm_ms_set_idle_host_callback (&idle_host_callback); See Also ``pvm_ms_set_message_callback'' 4.12. pvm_ms_set_hosts Synopsis Set list of hosts to use Usage pvm_ms_set_hosts (String_Type hosts[]) Description This function may be used to specify which hosts will be used to perform distributed calculations. The default is to use all hosts in the current PVM. Example pvm_ms_set_hosts (["vex", "pirx", "aluche"]); See Also ``pvm_addhosts'' 5. PVM Module Function Reference 5.1. pvm_send_obj Synopsis Pack and send data objects Usage pvm_send (Int_Type tid, Int_Type msgid, object [,...]) Description This function is much like pvm_psend except that it sends additional type information with each object. Using this function paired with pvm_recv_obj simplifies sending aggregate data objects such as structures and removes the need for the receiver to specify datatypes explicitly. Example To send a S-lang structure to another process: variable obj = struct {name, x, y, data}; ... pvm_send_obj (tid, msgid, obj); See Also ``pvm_recv_obj'', ``pvm_psend'', ``pvm_unpack'' 5.2. pvm_recv_obj Synopsis Receive data objects from pvm_send_obj Usage obj = pvm_recv_obj () Description This function receives an object sent by pvm_send_obj and returns a slang object of the same type that was sent. It simplifies sending aggregate data types such as structures. Example To receive a S-lang object sent by another process via pvm_send_obj: obj = pvm_recv_obj (); See Also ``pvm_send_obj'', ``pvm_psend'', ``pvm_unpack'' 5.3. pvm_config Synopsis Returns information about the present virtual machine configuration Usage Struct_Type = pvm_config () Description See the PVM documentation. Example h = pvm_config (); See Also ``pvm_kill'' 5.4. pvm_kill Synopsis Terminates a specified PVM process Usage pvm_kill (Int_Type tid) Description See the PVM documentation. Example pvm_kill (tid); See Also ``pvm_config'' 5.5. pvm_initsend Synopsis Clear default send buffer and specify message encoding Usage bufid = pvm_initsend (Int_Type encoding) Description See the PVM documentation. Example bufid = pvm_initsend (PvmDataDefault); See Also ``pvm_send'' 5.6. pvm_pack Synopsis Pack the active message buffer with arrays of prescribed data type Usage pvm_pack (object) Description See the PVM documentation. Example pvm_pack (x); See Also ``pvm_unpack'' 5.7. pvm_send Synopsis Immediately sends the data in the active message buffer Usage pvm_send (Int_Type, tid, Int_Type msgid) Description See the PVM documentation. Example pvm_send (tid, msgid); See Also ``pvm_recv'' 5.8. pvm_recv Synopsis Receive a message Usage bufid = pvm_recv (Int_Type tid, Int_Type msgtag) Description See the PVM documentation. Example bufid = pvm_recv (tid, msgtag); See Also ``pvm_send'' 5.9. pvm_unpack Synopsis Unpack the active message buffer into arrays of prescribed data type Usage item = pvm_unpack (Int_Type type_id, Int_Type num) Description See the PVM documentation. Example item = pvm_unpack (type, num); See Also ``pvm_pack'' 5.10. pvm_psend Synopsis Pack and send data Usage pvm_psend (Int_Type tid, Int_Type msgid, object [,...]) Description See the PVM documentation. Example pvm_psend (tid, msgid, data); Notes Unlike the pvm_send function in the PVM library, this function does not operate asynchronously. See Also ``pvm_send'', ``pvm_initsend'', ``pvm_pack'', ``pvm_recv'' 5.11. pvm_addhosts Synopsis Add one or more hosts to the PVM server Usage Int_Type[] = pvm_addhosts (String_Type[] hosts) Description See the PVM documentation. Example tids = pvm_addhosts (["vex", "verus", "aluche"]); See Also ``pvm_addhosts'', ``pvm_config'', ``pvm_delhosts'' 5.12. pvm_delhosts Synopsis Delete one or more hosts from the PVM server Usage pvm_delhosts (String_Type[] hosts) Description See the PVM documentation. Example pvm_delhosts (["vex", "verus"]); See Also ``pvm_delhosts'', ``pvm_config'', ``pvm_kill'' 6. Module Symbols Lacking Documentation Although many more low-level PVM intrinsic functions are provided by the S-Lang module, not all of S-Lang interfaces have been documented. See the PVM documentation for information on the following functions: pvm_delhost pvm_export pvm_freebuf pvm_freecontext pvm_getcontext pvm_newcontext pvm_setcontext pvm_getopt pvm_nrecv pvm_sendsig pvm_tidtohost pvm_setopt pvm_config pvm_getrbuf pvm_getsbuf pvm_halt pvm_tasks pvm_kill pvm_mstat pvm_pstat pvm_mcast pvm_addhost pvm_archcode pvm_probe pvm_bufinfo pvm_notify pvm_unpack pvm_send pvm_recv pvm_pack pvm_initsend pvm_exit pvm_mytid pvm_parent pvm_spawn pvm_barrier pvm_getinst pvm_bcast pvm_gettid pvm_gsize pvm_joingroup pvm_lvgroup pvm_settmask pvm_tev_mask_init pvm_tev_mask_set pvm_sigterm_enable Similarly, the following PVM intrinsic constants are provided by the S-Lang module but are documented only through the PVM documentation. PvmDataDefault PvmDataRaw PvmDataInPlace PvmDataTrace PvmTaskDefault PvmTaskHost PvmTaskArch PvmTaskDebug PvmTaskTrace PvmMppFront PvmHostCompl PvmNoSpawnParent PvmTaskExit PvmHostDelete PvmHostAdd PvmRouteAdd PvmRouteDelete PvmNotifyCancel PvmRoute PvmDontRoute PvmAllowDirect PvmRouteDirect PvmDebugMask PvmAutoErr PvmOutputTid PvmOutputCode PvmTraceTid PvmTraceCode PvmTraceBuffer PvmTraceOptions PvmTraceFull PvmTraceTime PvmTraceCount PvmFragSize PvmResvTids PvmSelfOutputTid PvmSelfOutputCode PvmSelfTraceTid PvmSelfTraceCode PvmSelfTraceBuffer PvmSelfTraceOptions PvmShowTids PvmPollType PvmPollConstant PvmPollSleep PvmPollTime PvmOutputContext PvmTraceContext PvmSelfOutputContext PvmSelfTraceContext PvmNoReset PvmTaskSelf PvmTaskChild PvmBaseContext PvmMboxDefault PvmMboxPersistent PvmMboxMultiInstance PvmMboxOverWritable PvmMboxFirstAvail PvmMboxReadAndDelete PvmMboxWaitForInfo PvmOk PvmBadParam PvmMismatch PvmOverflow PvmNoData PvmNoHost PvmNoFile PvmDenied PvmNoMem PvmBadMsg PvmSysErr PvmNoBuf PvmNoSuchBuf PvmNullGroup PvmDupGroup PvmNoGroup PvmNotInGroup PvmNoInst PvmHostFail PvmNoParent PvmNotImpl PvmDSysErr PvmBadVersion PvmOutOfRes PvmDupHost PvmCantStart PvmAlready PvmNoTask PvmNotFound PvmExists PvmHostrNMstr PvmParentNotSet PvmNoEntry PvmDupEntry TEV_MCAST TEV_SEND TEV_RECV TEV_NRECV Table of Contents 1. Introduction to the PVM Module . . . . . . . . . . . . . . . . 2 2. Using the PVM Module . . . . . . . . . . . . . . . . . . . . . 3 3. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1. Example 1: A Simple Hello World Program . . . . . . . . . . 4 3.1.1. The hello_master program . . . . . . . . . . . . . . . . . 4 3.1.2. The hello_slave program . . . . . . . . . . . . . . . . . 6 3.2. Example 2: Using the Master-Slave Interface . . . . . . . . 6 3.2.1. The master program . . . . . . . . . . . . . . . . . . . . 7 3.2.2. The slave program . . . . . . . . . . . . . . . . . . . . 8 4. Master-Slave Function Reference . . . . . . . . . . . . . . . . 9 4.1. pvm_ms_kill . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.2. pvm_ms_set_num_processes_per_host . . . . . . . . . . . . . . 9 4.3. pvm_ms_set_debug . . . . . . . . . . . . . . . . . . . . . . 10 4.4. pvm_ms_slave_exit . . . . . . . . . . . . . . . . . . . . . . 10 4.5. pvm_ms_run_slave . . . . . . . . . . . . . . . . . . . . . . 10 4.6. pvm_ms_run_master . . . . . . . . . . . . . . . . . . . . . . 11 4.7. pvm_ms_add_new_slave . . . . . . . . . . . . . . . . . . . . 11 4.8. pvm_ms_set_message_callback . . . . . . . . . . . . . . . . . 12 4.9. pvm_ms_set_slave_exit_failed_callback . . . . . . . . . . . . 12 4.10. pvm_ms_set_slave_spawned_callback . . . . . . . . . . . . . 13 4.11. pvm_ms_set_idle_host_callback . . . . . . . . . . . . . . . 14 4.12. pvm_ms_set_hosts . . . . . . . . . . . . . . . . . . . . . . 14 5. PVM Module Function Reference . . . . . . . . . . . . . . . . . 16 5.1. pvm_send_obj . . . . . . . . . . . . . . . . . . . . . . . . 16 5.2. pvm_recv_obj . . . . . . . . . . . . . . . . . . . . . . . . 16 5.3. pvm_config . . . . . . . . . . . . . . . . . . . . . . . . . 17 5.4. pvm_kill . . . . . . . . . . . . . . . . . . . . . . . . . . 17 5.5. pvm_initsend . . . . . . . . . . . . . . . . . . . . . . . . 17 5.6. pvm_pack . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5.7. pvm_send . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5.8. pvm_recv . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5.9. pvm_unpack . . . . . . . . . . . . . . . . . . . . . . . . . 19 5.10. pvm_psend . . . . . . . . . . . . . . . . . . . . . . . . . 19 5.11. pvm_addhosts . . . . . . . . . . . . . . . . . . . . . . . . 20 5.12. pvm_delhosts . . . . . . . . . . . . . . . . . . . . . . . . 20 6. Module Symbols Lacking Documentation . . . . . . . . . . . . . 21 pvm-0.1.5/doc/html/0000755002606100260610000000000010330414315014272 5ustar houckhouck00000000000000pvm-0.1.5/doc/html/pvm-1.html0000644002606100260610000000664010330414267016134 0ustar houckhouck00000000000000 S-Lang PVM Module Reference: Introduction to the PVM Module Next Previous Contents


1. Introduction to the PVM Module

PVM (Parallel Virtual Machine) is a software package which permits a heterogeneous collection of Unix and/or Windows computers, connected by a network, to be used as a single large parallel computer. The PVM module provides a S-lang interface to this package. By performing distributed computations with S-lang one can make better use of available computer resources yet still retain the advantages of programming in an interpreted language.

This document briefly describes how to use the S-lang interface to PVM. It assumes that the reader is already familiar with the PVM package itself.

For complete details on obtaining, installing and using the PVM package, see the PVM documentation. Note that, once the PVM package is properly installed on your computer, the PVM man pages will provide detailed documentation on all the PVM library functions.

Although the S-lang PVM module functions often have slightly different interfaces, the differences are usually minor so the PVM documentation is quite helpful. Because the S-lang interface is not yet fully documented, it will be necessary to consult the PVM documentation directly to make full use of the S-lang PVM module.

Because PVM processes require running programs on remote hosts, it is necessary to provide each host with the full path to the relevant executables. To simplify this process, it may be useful to create a directory, e.g.$HOME/bin/PVM, on every host and put relevant executables in that directory so that the same relative path will work on all machines. This PVM path may be specified in the $HOME/.pvmhosts configuration file; for a detailed description of the contents of this file, see the pvmd man page.

The usage examples discussed in this manual assume that the PVM has already been initialized by running a command such as

  unix> pvm ~/.pvmhosts
This starts the PVM console and also starts the PVM daemon, pvmd, on each remote host. This daemon runs all PVM slave processes and handles all communications with the parent process and the rest of the PVM.

The execution environment of the PVM slave processes is inherited from the corresponding pvmd process which, in turn, is inherited from the parent process which started the PVM console. However, it is sometimes useful to configure the environment of the remote pvmd process using a startup script, $HOME/.pvmprofile. This is a Bourne shell script which, if present, is run when pvmd is started. For a detailed description of the contents of this file, see the pvmd man page.


Next Previous Contents pvm-0.1.5/doc/html/pvm-2.html0000644002606100260610000000326510330414267016135 0ustar houckhouck00000000000000 S-Lang PVM Module Reference: Using the PVM Module Next Previous Contents

2. Using the PVM Module

To use the PVM module in a S-lang script, it is first necessary to make the functions in the package known to the interpreter via

    () = evalfile ("pvm");
or, if the application embedding the interpreter supports the require function,
    require ("pvm");
may be used. If there is a namespace conflict between symbols in the script and those defined in the module, it may be necessary to load the PVM package into a namespace, e.g.,
   () = evalfile ("pvm", "p");
will place the PVM symbols into a namespace called p.

Once the PVM module has been loaded, the functions it defines may be used in the usual way, e.g.,

    require ("pvm");
        .
        .
    variable master_tid = pvm_mytid ();
where pvm_mytid is the PVM function which returns the task identifier of the calling process.


Next Previous Contents pvm-0.1.5/doc/html/pvm-3.html0000644002606100260610000003064310330414267016136 0ustar houckhouck00000000000000 S-Lang PVM Module Reference: Examples Next Previous Contents

3. Examples

This section presents examples of two alternate methods of using the PVM module. The source code for these examples is included in the PVM module source code distribution in the examples subdirectory. The first method uses PVM library routines to manage a simple distributed application. The second method uses the higher-level master-slave interface. This interface can provide a high degree of tolerance to failure of slave machines which proves useful in long-running distributed applications.

3.1 Example 1: A Simple Hello World Program

In programming language tutorials, the first example is usually a program which simply prints out a message such as Hello World and then exits. The intent of such a trivial example is to illustrate all the steps involved in writing and running a program in that language.

To write a Hello World program using the PVM module, we will write two programs, the master ( hello_master), and the slave ( hello_slave). The master process will spawn a slave process on different host and then wait for a message from that slave process. When the slave runs, it sends a message to the master, or parent, and then exits. For the purpose of this example, we will assume that the PVM consists of two hosts, named vex and pirx, and that the slave process will run on pirx.

The hello_master program

First, consider the master process, hello_master. Conceptually, it must specify the full path to the slave executable and then send that information to the slave host (pirx). For this example, we assume that the master and slave executables are in the same directory and that the master process is started in that directory. With this assumption, we can construct the path to the slave executable using the getcwd and path_concat functions. We then send this information to the slave host using the pvm_spawn function:

   path = path_concat (getcwd(), "hello_slave");
   slave_tid = pvm_spawn (path, PvmTaskHost, "pirx", 1);
The first argument to pvm_spawn specifies the full path to the slave executable. The second argument is a bit mask specifying options associated with spawning the slave process. The PvmTaskHost option indicates that the slave process is to be started on a specific host. The third argument gives the name of the slave host and the last argument indicates how many copies of this process should be started. The return value of pvm_spawn is an array of task identifiers for each of the slave processes; negative values indicate that an error occurred.

Having spawned the hello_slave process on pirx, the master process calls the pvm_recv function to receive a message from the slave.

   bufid = pvm_recv (-1, -1);
The first argument to pvm_recv specifies the task identifier of the slave process expected to send the message and the second argument specifies the type of message that is expected. A slave task identifier -1 means that a message from any slave will be accepted. Similarly, a message identifier of -1 means that any type of message will be accepted. In this example, we could have specified the slave task id and the message identifier explicitly:
  bufid = pvm_recv (slave_tid, 1);
When a suitable message is received, the contents of the message are stored in a PVM buffer and pvm_recv returns the buffer identifier which may be used by the PVM application to retrieve the contents of the buffer.

Retrieving the contents of the buffer normally requires knowing the format in which the information is stored. In this case, because we accepted all types of messages from the slave, we may need to examine the message buffer to find out what kind of message was actually recieved. The pvm_bufinfo function is used to obtain information about the contents of the buffer.

   (,msgid,) = pvm_bufinfo (bufid);
Given the buffer identifier, pvm_bufinfo returns the number of bytes, the message identifier and the task identifer sending the message.

Because we know that the slave process sent a single object of Struct_Type, we retrieve it by calling the pvm_recv_obj function.

   variable obj = pvm_recv_obj();
   vmessage ("%s says %s", obj.from, obj.msg);
This function is not part of the PVM package but is a higher level function provided by the PVM module. It simplifies the process of sending S-lang objects between hosts by handling some of the bookkeeping required by the lower level PVM interface. Having retrieved a S-lang object from the message buffer, we can then print out the message. Running hello_master, we see:
  vex> ./hello_master
  pirx says Hello World
Note that before exiting, all PVM processes should call the pvm_exit function to inform the pvmd daemon of the change in PVM status.
   pvm_exit();
   exit(0);
At this point, the script may exit normally.

The hello_slave program

Now, consider the slave process, hello_slave. Conceptually, it must first determine the location of its parent process, then create and send a message to that process.

The task identifier of the parent process is obtained using the pvm_parent function.

   variable ptid = pvm_parent();
For this example, we will send a message consisting of a S-lang structure with two fields, one containing the name of the slave host and the other containing the string "Hello World".

We use the pvm_send_obj function to send this this message because it automatically handles packaging all the separate structure fields into a PVM message buffer and also sends along the structure field names and data types so that the structure can be automatically re-assembled by the receiving process. This makes it possible to write code which transparently sends S-lang objects from one host to another. To create and send the structure:

   variable s = struct {msg, from};
   s.msg = "Hello World";
   s.from = getenv ("HOST");

   pvm_send_obj (ptid, 1, s);
The first argument to pvm_send_obj specifies the task identifier of the destination process, the second argument is a message identifier which is used to indicate what kind of message has been sent. The remaining arguments contain the data objects to be included in the message.

Having sent a message to the parent process, the slave process then calls pvm_exit to inform the pvmd daemon that its work is complete. This allows pvmd to notify the parent process that a slave process has exited. The slave then exits normally.

3.2 Example 2: Using the Master-Slave Interface

The PVM module provides a higher level interface to support the master-slave paradigm for distributed computations. The symbols associated with this interface have the pvm_ms prefix to distinguish them from those symbols associated with the PVM package itself.

The pvm_ms interface provides a means for handling computations which consist of a predetermined list of tasks which can be performed by running arbitrary slave processes which take command-line arguments. The interface provides a high degree of robustness, allowing one to add or delete hosts from the PVM while the distributed process is running and also ensuring that the task list will be completed even if one or more slave hosts fail (e.g. crash) during the computation. Experience has shown that this failure tolerance is surprisingly important. Long-running distributed computations experience failure of one or more hosts with surprising frequency and it is essential that such failures do not require restarting the entire distributed computation from the beginning.

Scripts using this interface must initialize it by loading the pvm_ms package via, e.g.

      require ("pvm_ms");
As an example of how to use this interface, we examine the scripts master and slave.

The master program

The master script first builds a list of tasks each consisting of an array of strings which provide the command line for each slave process that will be spawned on the PVM. For this simple example, the same command line will be executed a specified number of times. First, the script constructs the path to the slave executable, (Slave_Pgm), and then the command line (Cmd), that each slave instance will invoke. Then the array of tasks is constructed:

 variable pgm_argvs = Array_Type[N];
 variable pgm_argv = [Slave_Pgm, Cmd];

 pgm_argvs[*] = pgm_argv;

The distribution of these tasks across the available PVM is automatically handled by the pvm_ms interface. The interface will simultaneously start as many tasks as possible up to some maximum number of processes per host. Here we specify that a maximum of two processes per host may run simultaneously and then submit the list of tasks to the PVM:

   pvm_ms_set_num_processes_per_host (2);
   exit_status = pvm_ms_run_master (pgm_argvs);

As each slave process is completed, its exit status is recorded along with any messages printed to stdout during the execution. When the entire list of tasks is complete, an array of structures is returned containing status information for each task that was executed. In this example, the master process simply prints out this information.

The slave program

The slave process in this example is relatively simple. Its command line arguments provide the task to be completed. These arguments are then passed to pvm_ms_run_slave

  pvm_ms_run_slave (__argv[[1:]]);
which spawns a subshell, runs the specified command, communicates the task completion status to the parent process and exits.


Next Previous Contents pvm-0.1.5/doc/html/pvm-4.html0000644002606100260610000003040110330414267016127 0ustar houckhouck00000000000000 S-Lang PVM Module Reference: Master-Slave Function Reference Next Previous Contents

4. Master-Slave Function Reference

4.1 pvm_ms_kill

Synopsis

Send a "task complete" message to a specific task

Usage

pvm_ms_kill (Int_Type mtid, Int_Type stid)

Description

This function may be used to send a "task complete" message to a specific PVM process. The first argument gives the task identifier of the destination process. The second argument gives the task identifier of the sending process.

Example

  tid = pvm_mytid ();
  ptid = pvm_parent ();
  pvm_ms_kill (ptid, tid);

See Also

pvm_ms_slave_exit

4.2 pvm_ms_set_num_processes_per_host

Synopsis

Set the maximum number of simultaneous processes per host

Usage

pvm_ms_set_num_processes_per_host (Int_Type num_processes)

Description

This function is used to set the maximum number of simultaneous processes per host. The master process normally runs as many simultaneous processes as possible; by setting the maximum number of simultaneous processes per host, one can limit the processing load per host.

Example

  pvm_ms_set_num_processes_per_host (2);

See Also

pvm_ms_run_master

4.3 pvm_ms_set_debug

Synopsis

Set the debug flag

Usage

pvm_ms_set_debug (Int_Type debug)

Description

This function may be used to control whether debugging information is printed out during execution. Debugging information is printed if the flag is non-zero.

Example

  pvm_ms_set_debug (1);

See Also

pvm_ms_set_num_processes_per_host

4.4 pvm_ms_slave_exit

Synopsis

Cause a normal exit of a slave process from the PVM

Usage

pvm_ms_slave_exit (Int_Type exit_status)

Description

To exit the PVM, a slave process calls this function to send its exit status to the parent process and to notify the local pvmd of its exit.

Example

    pvm_ms_slave_exit (exit_status);

See Also

pvm_ms_run_slave

4.5 pvm_ms_run_slave

Synopsis

Execute the slave's assigned task in a subshell, then exit the PVM

Usage

pvm_ms_run_slave (String_Type argv[])

Description

A slave process calls this function to run a command in a subshell and then exit the PVM. The command line is constructed by concatenting the elements of an array of strings, argv, delimited by spaces. The integer return value from the system call provides the exit status for the slave process. After sending this value to its parent process, the slave notifies the PVM and exits.

Example

   pvm_ms_run_slave (argv);

See Also

pvm_ms_slave_exit

4.6 pvm_ms_run_master

Synopsis

Submit a list of tasks to the PVM

Usage

Struct_Type exit_status[] = pvm_ms_run_master (String_Type pgms[])

Description

This function is used to submit a managed list of tasks to the PVM. The task list manager will try to ensure that all tasks are completed and, upon completion of the task list, will return an array of structures containing information about the results of each task.

Example

To run the Unix command ps xu on a number of different hosts:

    variable slave_argv = Array_Type[n];
    slave_argv[*] = ["ps", "axu"];
    exit_status = pvm_ms_run_master (slave_argv);

See Also

pvm_ms_add_new_slave

4.7 pvm_ms_add_new_slave

Synopsis

Add a new slave to the managed list

Usage

pvm_ms_add_new_slave (String_Type argv[])

Description

This function may be used to add a new slave process while pvm_ms_run_master() is running, usually as a result of handling a message.

Example

    pvm_ms_add_new_slave ("vex");

See Also

pvm_ms_run_master

4.8 pvm_ms_set_message_callback

Synopsis

Set a callback for handling user-defined messages

Usage

pvm_ms_set_message_callback (Ref_Type func)

Description

This function may be used to handle user-defined messages be sent from slave processes back to the master process.

Example


 static define handle_user_message (msgid, tid)
 {
    switch (msgid)
      {
       case USER_SLAVE_RESULT:
           recv_results (tid);
           start_task (tid);
      }
      {
       case USER_SLAVE_READY:
           start_task (tid);
      }
      {
         % default:
           return 0;
      }
    return 1;
 }

 pvm_ms_set_message_callback (&handle_user_message);

See Also

pvm_ms_set_idle_host_callback, pvm_ms_set_slave_exit_failed_callback

4.9 pvm_ms_set_slave_exit_failed_callback

Synopsis

Set a hook to be called when a slave exits on failure

Usage

pvm_ms_set_slave_exit_failed_callback (Ref_Type func)

Description

This function may be used to have the master process perform a specified action whenever a slave process exits without having completed its assigned task.

This is primarily useful in the context where each command-line submitted to pvm_ms_run_master represents a task which itself communicates with the PVM, performing potentially many additional tasks which are independently managed by the process that called pvm_ms_run_master.

For example, consider a case in which initialization of slave processes is very expensive but, once initialized, a single slave process may perform many tasks. In this case, the master process may spawn a small number of slaves and then repeatedly send each slave a task to perform. Each slave performs its task, sends the result to the master, and then waits for another task. The managing process must keep track of which tasks have been completed and which remain. If a slave exits while working on a task, it is important that the manager process be notified that that task in progress was not completed and that it should be reassigned to another slave.

Example

   static define slave_exit_failed_callback (msgid, tid)
   {
      variable t = find_task_tid (tid);

      if (orelse {t == NULL} {t.status == FINISHED})
        return;

      % mark the unfinished task "READY" so that it will
      % be assigned to another slave

      t.tid = -1;
      t.status = READY;
   }

   pvm_ms_set_slave_exit_failed_callback (&slave_exit_failed_callback);

See Also

pvm_ms_set_message_callback

4.10 pvm_ms_set_slave_spawned_callback

Synopsis

Set the slave spawned callback hook

Usage

pvm_ms_set_slave_spawned_callback (Ref_Type func)

Description

This function may be used to specify a callback function to be called whenever a slave process has been spawned. The callback function will be called with three arguments: the slave task id, the name of the host running the slave process, and an array of strings representing the argument list passed to the slave.

Example

   static define slave_spawned_callback (tid, host, argv)
   {
      vmessage ("Slave running %s spawned on %s with task-id %d",
                argv[0], host, tid);
   }
   pvm_ms_set_slave_spawned_callback (&slave_spawned_callback);

See Also

pvm_ms_set_message_callback

4.11 pvm_ms_set_idle_host_callback

Synopsis

Set the idle host hook

Usage

pvm_ms_set_idle_host_callback (Ref_Type func)

Description

This function may be used to specify a callback function to be called whenever a new host is added to the virtual machine.

Example

 static define idle_host_callback ()
 {
    loop (Max_Num_Processes_Per_Host)
      {
         variable slave_argv = build_slave_argv (0);
         pvm_ms_add_new_slave (slave_argv);
      }
 }
 pvm_ms_set_idle_host_callback (&idle_host_callback);

See Also

pvm_ms_set_message_callback

4.12 pvm_ms_set_hosts

Synopsis

Set list of hosts to use

Usage

pvm_ms_set_hosts (String_Type hosts[])

Description

This function may be used to specify which hosts will be used to perform distributed calculations. The default is to use all hosts in the current PVM.

Example

      pvm_ms_set_hosts (["vex", "pirx", "aluche"]);

See Also

pvm_addhosts


Next Previous Contents pvm-0.1.5/doc/html/pvm-5.html0000644002606100260610000002042310330414267016133 0ustar houckhouck00000000000000 S-Lang PVM Module Reference: PVM Module Function Reference Next Previous Contents

5. PVM Module Function Reference

5.1 pvm_send_obj

Synopsis

Pack and send data objects

Usage

pvm_send (Int_Type tid, Int_Type msgid, object [,...])

Description

This function is much like pvm_psend except that it sends additional type information with each object. Using this function paired with pvm_recv_obj simplifies sending aggregate data objects such as structures and removes the need for the receiver to specify datatypes explicitly.

Example

To send a S-lang structure to another process:

  variable obj = struct {name, x, y, data};
  ...
  pvm_send_obj (tid, msgid, obj);

See Also

pvm_recv_obj, pvm_psend, pvm_unpack

5.2 pvm_recv_obj

Synopsis

Receive data objects from pvm_send_obj

Usage

obj = pvm_recv_obj ()

Description

This function receives an object sent by pvm_send_obj and returns a slang object of the same type that was sent. It simplifies sending aggregate data types such as structures.

Example

To receive a S-lang object sent by another process via pvm_send_obj:

  obj = pvm_recv_obj ();

See Also

pvm_send_obj, pvm_psend, pvm_unpack

5.3 pvm_config

Synopsis

Returns information about the present virtual machine configuration

Usage

Struct_Type = pvm_config ()

Description

See the PVM documentation.

Example

  h = pvm_config ();

See Also

pvm_kill

5.4 pvm_kill

Synopsis

Terminates a specified PVM process

Usage

pvm_kill (Int_Type tid)

Description

See the PVM documentation.

Example

  pvm_kill (tid);

See Also

pvm_config

5.5 pvm_initsend

Synopsis

Clear default send buffer and specify message encoding

Usage

bufid = pvm_initsend (Int_Type encoding)

Description

See the PVM documentation.

Example

  bufid = pvm_initsend (PvmDataDefault);

See Also

pvm_send

5.6 pvm_pack

Synopsis

Pack the active message buffer with arrays of prescribed data type

Usage

pvm_pack (object)

Description

See the PVM documentation.

Example

  pvm_pack (x);

See Also

pvm_unpack

5.7 pvm_send

Synopsis

Immediately sends the data in the active message buffer

Usage

pvm_send (Int_Type, tid, Int_Type msgid)

Description

See the PVM documentation.

Example

  pvm_send (tid, msgid);

See Also

pvm_recv

5.8 pvm_recv

Synopsis

Receive a message

Usage

bufid = pvm_recv (Int_Type tid, Int_Type msgtag)

Description

See the PVM documentation.

Example

   bufid = pvm_recv (tid, msgtag);

See Also

pvm_send

5.9 pvm_unpack

Synopsis

Unpack the active message buffer into arrays of prescribed data type

Usage

item = pvm_unpack (Int_Type type_id, Int_Type num)

Description

See the PVM documentation.

Example

  item = pvm_unpack (type, num);

See Also

pvm_pack

5.10 pvm_psend

Synopsis

Pack and send data

Usage

pvm_psend (Int_Type tid, Int_Type msgid, object [,...])

Description

See the PVM documentation.

Example

  pvm_psend (tid, msgid, data);

Notes

Unlike the pvm_send function in the PVM library, this function does not operate asynchronously.

See Also

pvm_send, pvm_initsend, pvm_pack, pvm_recv

5.11 pvm_addhosts

Synopsis

Add one or more hosts to the PVM server

Usage

Int_Type[] = pvm_addhosts (String_Type[] hosts)

Description

See the PVM documentation.

Example

  tids = pvm_addhosts (["vex", "verus", "aluche"]);

See Also

pvm_addhosts, pvm_config, pvm_delhosts

5.12 pvm_delhosts

Synopsis

Delete one or more hosts from the PVM server

Usage

pvm_delhosts (String_Type[] hosts)

Description

See the PVM documentation.

Example

  pvm_delhosts (["vex", "verus"]);

See Also

pvm_delhosts, pvm_config, pvm_kill


Next Previous Contents pvm-0.1.5/doc/html/pvm-6.html0000644002606100260610000000666210330414267016145 0ustar houckhouck00000000000000 S-Lang PVM Module Reference: Module Symbols Lacking Documentation Next Previous Contents

6. Module Symbols Lacking Documentation

Although many more low-level PVM intrinsic functions are provided by the S-Lang module, not all of S-Lang interfaces have been documented. See the PVM documentation for information on the following functions:

    pvm_delhost
    pvm_export
    pvm_freebuf
    pvm_freecontext
    pvm_getcontext
    pvm_newcontext
    pvm_setcontext
    pvm_getopt
    pvm_nrecv
    pvm_sendsig
    pvm_tidtohost
    pvm_setopt
    pvm_config
    pvm_getrbuf
    pvm_getsbuf
    pvm_halt
    pvm_tasks
    pvm_kill
    pvm_mstat
    pvm_pstat
    pvm_mcast
    pvm_addhost
    pvm_archcode
    pvm_probe
    pvm_bufinfo
    pvm_notify
    pvm_unpack
    pvm_send
    pvm_recv
    pvm_pack
    pvm_initsend
    pvm_exit
    pvm_mytid
    pvm_parent
    pvm_spawn
    pvm_barrier
    pvm_getinst
    pvm_bcast
    pvm_gettid
    pvm_gsize
    pvm_joingroup
    pvm_lvgroup
    pvm_settmask
    pvm_tev_mask_init
    pvm_tev_mask_set
    pvm_sigterm_enable

Similarly, the following PVM intrinsic constants are provided by the S-Lang module but are documented only through the PVM documentation.

    PvmDataDefault
    PvmDataRaw
    PvmDataInPlace
    PvmDataTrace
    PvmTaskDefault
    PvmTaskHost
    PvmTaskArch
    PvmTaskDebug
    PvmTaskTrace
    PvmMppFront
    PvmHostCompl
    PvmNoSpawnParent
    PvmTaskExit
    PvmHostDelete
    PvmHostAdd
    PvmRouteAdd
    PvmRouteDelete
    PvmNotifyCancel
    PvmRoute
    PvmDontRoute
    PvmAllowDirect
    PvmRouteDirect
    PvmDebugMask
    PvmAutoErr
    PvmOutputTid
    PvmOutputCode
    PvmTraceTid
    PvmTraceCode
    PvmTraceBuffer
    PvmTraceOptions
    PvmTraceFull
    PvmTraceTime
    PvmTraceCount
    PvmFragSize
    PvmResvTids
    PvmSelfOutputTid
    PvmSelfOutputCode
    PvmSelfTraceTid
    PvmSelfTraceCode
    PvmSelfTraceBuffer
    PvmSelfTraceOptions
    PvmShowTids
    PvmPollType
    PvmPollConstant
    PvmPollSleep
    PvmPollTime
    PvmOutputContext
    PvmTraceContext
    PvmSelfOutputContext
    PvmSelfTraceContext
    PvmNoReset
    PvmTaskSelf
    PvmTaskChild
    PvmBaseContext
    PvmMboxDefault
    PvmMboxPersistent
    PvmMboxMultiInstance
    PvmMboxOverWritable
    PvmMboxFirstAvail
    PvmMboxReadAndDelete
    PvmMboxWaitForInfo
    PvmOk
    PvmBadParam
    PvmMismatch
    PvmOverflow
    PvmNoData
    PvmNoHost
    PvmNoFile
    PvmDenied
    PvmNoMem
    PvmBadMsg
    PvmSysErr
    PvmNoBuf
    PvmNoSuchBuf
    PvmNullGroup
    PvmDupGroup
    PvmNoGroup
    PvmNotInGroup
    PvmNoInst
    PvmHostFail
    PvmNoParent
    PvmNotImpl
    PvmDSysErr
    PvmBadVersion
    PvmOutOfRes
    PvmDupHost
    PvmCantStart
    PvmAlready
    PvmNoTask
    PvmNotFound
    PvmExists
    PvmHostrNMstr
    PvmParentNotSet
    PvmNoEntry
    PvmDupEntry
    TEV_MCAST
    TEV_SEND
    TEV_RECV
    TEV_NRECV


Next Previous Contents pvm-0.1.5/doc/html/pvm.html0000644002606100260610000000630610330414267015775 0ustar houckhouck00000000000000 S-Lang PVM Module Reference Next Previous Contents

S-Lang PVM Module Reference

John C. Houck, houck@space.mit.edu

Oct 28, 2005

1. Introduction to the PVM Module

2. Using the PVM Module

3. Examples

4. Master-Slave Function Reference

5. PVM Module Function Reference

6. Module Symbols Lacking Documentation


Next Previous Contents pvm-0.1.5/doc/ps/0000755002606100260610000000000010330414315013750 5ustar houckhouck00000000000000pvm-0.1.5/doc/ps/pvm.ps0000644002606100260610000047324210330414314015131 0ustar houckhouck00000000000000%!PS-Adobe-2.0 %%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software %%Title: pvm.dvi %%Pages: 30 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o pvm.ps pvm.dvi %DVIPSParameters: dpi=600, compressed %DVIPSSource: TeX output 2005.10.28:0825 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet TeXDict begin 39158280 55380996 1000 600 600 (pvm.dvi) @start %DVIPSBitmapFont: Fa ectt1200 12 11 /Fa 11 119 df<007FB612FEA2B8FCA36C15FEA228077B7D33>95 D97 D101 D104 D<383FFFFC487FB5FCA27E7EC7FCB3B3AD003FB612F84815FCB712FEA26C15FC6C15F827 3D7ABC33>108 D<02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C 010F13872607FE07130301FC01FE7F9039F803FC01A201F013F8A401E013F0B3A53C7FFE 0FFF07FF80B548018F13C0A46C486C01071380322C80AB33>I111 D114 D<90381FFE0F90B5EA8F80 000314FF120F5A5AEBF007387F800190C7FC00FE147F5A153FA37E007FEC1F0001C090C7 FCEA3FF8EBFFC06C13FF6C14E0000314F8C680011F13FF01001480020713C0EC007FED1F E0007C140F00FEEC07F01503A27EA27F15076D14E06D130F6DEB3FC09038FE01FF90B612 80160000FD5C00FC14F8D8F83F13E0D8780790C7FC242E79AC33>II<3B3FFFC00FFF F0486D4813F8B56C4813FCA26C496C13F86C496C13F0D801F8C7EA7E006D14FE00005DA2 6D1301017E5CA2017F13036D5CA2EC8007011F5CA2ECC00F010F5CA36D6C485AA3ECF03F 010391C7FCA26E5A0101137EA2ECFCFE01005BA214FF6E5AA36E5AA26E5A6E5A2E2B7EAA 33>118 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fb ecbx1200 12 13 /Fb 13 115 df46 D49 DII<003FBA12E0 A59026FE000FEB8003D87FE09338003FF049171F90C71607A2007E1803007C1801A30078 1800A400F819F8481978A5C81700B3B3A20107B8FCA545437CC24E>84 D<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7E A26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC0100 0313E0481380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013EEB FFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97 D101 D103 DI<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5D8F001B512E002816E 4880913D87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F009026FF3E007F6C019E 6D013C130F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B60003B512FEA5572D 7CAC5E>109 D111 D<90397FC00FF8B590B57E02C314E002CF14F89139DFC03FFC9139FF001FFE000301FCEB 07FF6C496D13804A15C04A6D13E05C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA2 4C13E06E15C06E5B6E4913806E4913006E495A9139DFC07FFC02CFB512F002C314C002C0 91C7FCED1FF092C9FCADB67EA536407DAC3E>I<90387F807FB53881FFE0028313F0028F 13F8ED8FFC91389F1FFE000313BE6C13BC14F8A214F0ED0FFC9138E007F8ED01E092C7FC A35CB3A5B612E0A5272D7DAC2E>114 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fc ecbi1440 14.4 7 /Fc 7 115 df<020FB7D8C00FB712C04A704816E0A207C017C0A2DA000301FCC8000301 FCC7FC655FA24B5F655FA24B5F655FA24B5F655FA24B5F655FA24B5F9AC8FC94C9FCA292 B593B5FC645EA24A5F645E93B9FC5C64A34A01F8C81207645EA24A5F645EA24A5F645EA2 4A5F645EA24A5F99C9FC93C9FCA291B593B5FC635DA2495F635DA2495F635DA2495F6300 7FB7017FB7FCA2B890B8FCA26C4B6D5D6B507ACF65>72 D<007FB6D8F00FB600FE010FB5 12FE70485FB7FC16F06C5016FCD8003F0180C7000F01E0C8383FFE00F603F0545A1E0F74 5E1E1F6F6354C7FC841E7E6D1CFE661D014E5F535A4E1607745D4E160F6F624E4C5A95B5 FC53C8FC6D4B5F06FB167EDD03F316FE05075F06E34B5A050F160306C36D5CDD1F831507 6F61DD3F034B5A4D7E057E4C5A6D03FE163F05FC94C9FCDC01F85E0403177E05F05E0407 160105E002FE5BDC0FC0150303F860DC1F804B5A043F7F94C74A5A6D4A161F047E5F4C16 3F03F995CAFC4C167E03FB17FE4C6F5AEDFFE0634C5E854C5E7F93C85C5D634B94CBFCA2 4B5E5D624B5E193F4B5E7F4B5E92C9FC624A5F4A70CCFC775168CF83>87 D100 DI108 D111 D114 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fd ecbx1440 14.4 45 /Fd 45 121 df28 D45 DI<913803FF80023F13F849B6FC010715C0 4901017F903A3FFC007FF8D97FF0EB1FFC49486D7E48496D7E4A7F4817804890C76C13C0 A248486E13E0A2001F17F0A3003F17F8A249157FA2007F17FCA600FF17FEB3A5007F17FC A6003F17F86D15FFA3001F17F0A3000F17E06D5C6C17C0A26C6D4913806C17006E5B6C6D 495A6D6C495AD93FFCEB7FF8903A0FFF01FFE06D90B55A010192C7FCD9003F13F8020313 80374F7BCD42>48 D<151E153E15FE1403140F147FEB07FF0003B5FCB6FCA3EBF87FEAFC 00C7FCB3B3B3A6007FB712FCA52E4E76CD42>I I<913807FFC0027F13FC0103B67E010F15E090261FF80313F890267FC0007F01FEC7EA3F FE48488148486E138013FE486C6C6D13C0804817E080A66C5B18C06C5B6C90C75AD80038 168090C8FC4C1300A24C5A5F4C5A4B5B4B13C0030F5BDB7FFEC7FC91387FFFF816C016FC EEFF80DA000313E09238007FF8EE3FFE707E70138018C07013E018F07013F8A218FC82A2 18FEA3EA03C0EA0FF0EA3FFC487EA2B5FCA218FCA25E18F8A26C4816F0495C4916E0D83F E04A13C06C485CD80FF04A1380D807FE91387FFE003B03FFE003FFFC6C90B65A6C6C15E0 010F92C7FC010114FCD9001F1380374F7BCD42>I<17FC1601A216031607160FA2161F16 3F167FA216FF5D5DA25D5D5D167F153E157E15FC15F8EC01F01403EC07E015C0EC0F8014 1FEC3F00143E5C14FC495A5C495A1307495A5C49C7FC5B137E137C5B1201485A5B485A12 0F485A90C8FC123E127E5ABA1280A5C901FCC7FCAF021FB71280A5394F7CCE42>I<486C 150601F0153E01FEEC01FED9FFF0133F91B65A5F5F5F5F5F94C7FC16FC5E16E093C8FC15 FC01F0138091CAFCAC913807FF80023F13F891B512FE01F36E7E9026FFFC0113E09139E0 007FF891C76C7E496E7E01F86E7E5B7013804916C0C9FC18E08218F0A418F8A31203EA0F E0EA3FF8487EA212FF7FA218F0A25B5E6C4816E05B01C016C06CC85A18806C6C4A13007F D80FF04A5A6C6CECFFFCD803FE4913F02701FFE00F5B6C6CB612806D92C7FC010F14F801 0114C09026003FFCC8FC354F7ACD42>II<121F7F7FEBFF8091B8FC A45A18FE18FC18F818F0A218E018C018804817000180C8123E007EC9127E5F007C4B5A4C 5A5F16074C5A484B5A4CC7FC167E167CC912FC4B5A4B5AA24B5A150F4B5AA24B5AA24BC8 FC5DA25C5D1403A214075D140FA3141FA2143FA34A5AA414FFA65BAB6D5B6E5A6E5A6E5A 385279D042>I<913803FFC0023F13FC49B67E010715E090260FFC0013F8D93FE0EB1FFC D97F80EB07FE49C76C7E496E1380484880000317C049157F120718E0173F120FA27FA27F 7F6E147F02E015C08002FC14FF6C01FF15806F481300EDE0036C9138F807FE6F485A6C91 38FF1FF06CEDFFE017806D4AC7FC7F010F6E7E6D81010115F06D81010315FE010F81D93F F71580D97FC115C02701FF807F14E048EB001F48486D14F04848010314F848481300496E 13FC003F151F491407007F6F13FE491400177F00FF163F49151F170F1707A21703A218FC A27F127F6DED07F8A26C6CED0FF07F6C6CED1FE06C6CED3FC06C6CEDFF806C01C0010313 006C01FCEB3FFE6C6CB612F8011F15E001071580010002FCC7FC020F13C0374F7BCD42> I<913807FF80027F13F849B512FE01076E7E90261FFE0113E0903A7FF8003FF049486D7E 48496D7E48496D7E484980486F138091C7FC486F13C05A18E0485A18F0A27013F812FFA3 18FCA618FEA35E127FA4003F5DA26C7E5E7E6C6D5B161E6C7F6C6D5B6C6C6C13F890393F FC03F06DB55A01074A13FC01001400EC1FF891C8FCA218F85EA301FC16F0487E2607FF80 15E05E486D15C0A24C1380A24C13005F4A131F6C4B5A49C7485A494A5A6C48495B6D0107 5B2701FF803F90C7FC6C90B512FC013F5C6D14C0010791C8FC9038007FF0374F7BCD42> II<173F A24D7EA34D7EA24C7FA34C7FA24C7FA34C7FA24C7FA34C7F163E83047E80EE7C3F04FC80 16F8830301814C7E03038116E0830307814C7E030F81168083031F811600834B81033E80 037E82157C8403FC824B800201835D840203834B800207835D92B8FC4A83A34A8392C9FC 4A83143E85027E84027C8202FC845C850101854A820103855C850107854A82A2494884D9 3FF082B600F0020FB712C0A55A547CD363>65 D69 D73 D77 D80 D83 D 85 D<007FBB12FCA2BC12FEA36C1AFCA24F07756366>95 D97 DI<913803FFE0023F13FE91B67E010315E001 0F9038003FF8D93FFCEB07FC4948497E4948131F4849497E485B485BA24890C7FC5A5B00 3F6F5A705A705A007F92C8FC5BA312FFAD127F7FA3123F7F6CEE0F80A26C6D141F18006C 6D5C6C6D143E6C6D147E6C6D5C6D6C495A6DB4EB07F0010F9038C01FE06D90B512800101 4AC7FCD9003F13F80203138031387CB63A>I<943803FF80040FB5FCA5EE003F170FB3A4 913803FF80023F13F849B512FE0107ECFF8F011F9038C03FEF90273FFE0007B5FCD97FF8 130149487F484980484980484980488291C8FC5A5B123FA2127F5BA312FFAD127FA37F12 3FA3121F7F6C5E6C6D5C5F6C6D91B5FC6C6D5B6C6D4914E0D97FFCD90FEFEBFF80D91FFF EB7F8F010790B5120F010114FC6D6C13E00207010049C7FC41547CD249>I<913807FF80 027F13F849B512FE01076E7E011F010313E0903A3FFC007FF0D97FF06D7E49486D7E4849 130F48496D7E48824890C77E1880485A82003F17C0A3485A18E082A212FFA290B8FCA401 FCCAFCA6127FA37F123FA2EF03E06C7E17076C17C06C6D140F18806C6D141F6C6DEC3F00 6C6D147ED97FFC495AD91FFFEB07F86D9038E03FF0010390B512C001005D023F01FCC7FC 020113E033387CB63C>IIII<133FEBFFC0487F487FA2487FA66C5BA26C5B6C5B013FC7FC90C8FCAEEB1FF8B5 FCA512017EB3B3A6B612F0A51C547CD324>I<153FEDFFC04A13E04A13F0A24A13F8A66E 13F0A26E13E06E13C0ED3F0092C7FCAEED3FF849B5FCA5EB00031400B3B3B1EA0780EA1F E0487E487E486C14F05CA216E0A24A13C0D87FF814804A13006C48485A001FEB3FFC6CB5 12F06C5C000191C7FC38003FF8256C87D328>IIIII<913801FFC0023F13FE91B67E010315E0010F018013F8903A3F FC001FFED97FF0EB07FF49486D7F48496D7F48496D7F91C8127F4883488349153F001F83 A2003F8349151FA2007F83A400FF1880AC007F1800A3003F5F6D153FA2001F5FA26C6C4B 5AA26C6D4A5A6C5F6C6D495B6C6D495B6D6C4990C7FCD93FFCEB1FFE6DB46CB45A010790 B512F0010115C0D9003F49C8FC020313E039387CB642>II<90393FF001FCB590380FFF804B13E003 7F13F09238FE1FF89138F1F83F00019138F07FFC6CEBF3E015C0ECF780A2ECFF00EE3FF8 4AEB1FF0EE0FE093C7FC5CA45CB3ABB612FEA52E367DB535>114 D<903903FFC00E011FEBFC1E90B6127E000315FE3907FE003FD80FF0130F484813034848 1301491300127F90C8127EA248153EA27FA27F01F091C7FC13FCEBFF806C13FEECFFF06C 14FE6F7E6C15E06C816C15FC6C81C681133F010F15801301D9000F14C0EC003F030713E0 150100F880167F6C153FA2161F7EA217C07E6D143F17807F6DEC7F0001F85C6DEB03FE90 39FF801FFC486CB512F0D8F81F14C0D8F00791C7FC39E0007FF02B387CB634>I<147CA6 14FCA41301A31303A21307A2130F131F133F137F13FF1203000F90B512FEB7FCA426007F FCC8FCB3A9EE0F80ABEE1F006D7EA2011F143E806D6D5A6DEBC1F86DEBFFF001005C023F 1380DA03FEC7FC294D7ECB33>IIIII E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fe ectt0900 9 70 /Fe 70 127 df<00101320007C13F838FE01FCAAEAFC00007C13F8A900381370161778AE 27>34 D<000F1470486C13F8383FC001EA7FE0140315F038FFF00700F914E0A2140F15C0 A2141F00FF1480387FE03F1500A26C485A381F807E380F00FEC75AA213015CA213035C13 075CA2130F5C131F5CA2133F91C7FCA24913F090387E01F89038FE03FC9038FC07FEA212 019038F80FFF0003149F13F0A2120713E0A2000F14FF9038C007FE121F1380EC03FC000F EB01F86CC712F0203A7DB327>37 D<131FEB7FC0497E5A80EA03F1EBE1F8EA07E013C0A5 13C15C9039C3F1FF80D9E3E113C03803E7E3EBEFC101FF1480913881F800EC01F0EA01FE EBFC0301F85B00031307D807FC5B120F381FFE0FD83FBE5BEB3F1FD87E1F90C7FC149F38 FC0FBF14FE1307ECFC020103EB0F80EB01F8A238FE03FC387E07FE397F1FFF9F6CB61200 149F6CEB0FFE390FFC03FC3903F000F822307EAE27>I 40 D<127012F812FE7E6C7E6C7EEA0FE06C7E12037F6C7E1200137EA27FA2EB1F80A3EB 0FC0A4EB07E0ACEB0FC0A4EB1F80A3EB3F00A2137EA25B1201485A5B1207485AEA3FC048 5A48C7FC5A12F81270133A7AB327>I<130F497EA60078EB81E000FEEB87F000FF138FEB DFBF6CB512E06C14C0000F1400000313FCC613F0A2000313FC000F13FF003F14C04814E0 39FFDFBFF0EB1F8F00FE13870078EB81E00000EB8000A66DC7FC1C207BA627>I<120FEA 3FC013E0EA7FF0A213F8A2123FA2120F120113F01203EA07E0121FEA7FC0EAFF8013005A 12700D14738927>44 D<007FB51280B612C0A36C14801A057A9227>I<121EEA7F80A2EA FFC0A4EA7F80A2EA1E000A0A728927>I<1538157CA215FC15F8140115F0140315E01407 15C0A2140F1580141F15005C143E147E147C14FC5C13015C13035C13075C130F5CA2131F 91C7FC5B133E137E137C13FC5B12015B12035B12075B120F5BA2121F90C8FC5A123E127E 127C12FC5AA212701E3A7CB327>II<130E131FA25B5BA25B5A5A 127FB5FCA213BFEA7E3F1200B3AA003FB512805A15C01580A21A2F79AE27>II<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCAC121E EA7F80A2EAFFC0A4EA7F80A2EA1E000A20729F27>58 D<120FEA3FC0A2EA7FE0A4EA3FC0 A2EA0F00C7FCAC120FEA3FC013E0EA7FF0A213F8A2123FA2120F120113F01203EA07E012 1FEA7FC0EAFF8013005A12700D2A739F27>I<003FB512FCB7FCA4C9FCA8B7FCA4003F14 FC20127D9F27>61 D<127012FC7E6C7E6C7EEA1FF06C7EEA03FE6C7E38007FC06D7EEB0F F86D7EEB01FF6D1380EC3FE0EC1FF0EC07FC1403A21407EC1FF0EC3FE0ECFF80491300EB 07FC495AEB3FE0495A4848C7FC485AEA0FF8485AEA7FC0485A48C8FC5A12701E267CA927 >I65 D<007FB5FCB612C08115F87E3907E003FCEC00FE157E157F81A6 157EA25D1403EC0FF890B55A15C015F081819038E000FE157FED3F80151FA2ED0FC0A615 1F1680153FED7F004A5A007FB55AB65A5D15E06C1480222E7FAD27>I<903803F80E9038 1FFE1F90383FFFBF90B6FC5A3803FE0F3807F803497E48487E485A49137FA248C7123FA2 5A127E151E150012FE5AAA7E127EA2151E007F143F7EA26C7E157F6D137E6C6C13FE3907 F001FCEBF8033903FE0FF86CB512F06C14E0013F13C06D1300EB03F820307DAE27>I<38 7FFFFC14FFB612C06C80813907E00FF81407EC01FC6E7EA2157E157F811680151FA316C0 150FABED1F80A3153F1600A25D15FEA24A5A4A5A140F007FB55A5DB65A6C91C7FC14FC22 2E7FAD27>I<007FB61280B712C0A37E3907E0000FA6ED078092C7FCA4EC07804A7EA390 B5FCA5EBE00FA36E5A91C8FCA4ED03C0ED07E0A7007FB6FCB7FCA36C15C0232E7FAD27> I<007FB61280B712C0A37E3907E0000FA6ED078092C7FCA4EC07804A7EA390B5FCA5EBE0 0FA36E5A91C8FCAC387FFF80B57EA36C5B222E7EAD27>I<903807F03890381FFC7C9038 7FFFFC90B5FC5A3803FC1F3807F00F380FE007EBC003001F13011380123F90C7FCA2127E A2157892C7FC5AA8EC1FFF4A1380A3007E6D1300EC00FCA36C1301A21380121FEBC00312 0FEBE0073807F00F3803FC1F6CB5FC7EEB7FFE90381FFC78D907F0C7FC21307DAE27>I< 3A7FFE07FFE0B54813F0A36C486C13E03A07E0007E00AF90B512FEA59038E0007EB03A7F FE07FFE0B54813F0A36C486C13E0242E7FAD27>I<007FB512E0B612F0A36C14E039001F 8000B3B2007FB512E0B612F0A36C14E01C2E7BAD27>I<387FFFC080B5FC7E5CD803F0C8 FCB3AAED0780ED0FC0A7007FB6FCA2B7FC7E1680222E7FAD27>76 DI<3A7FF003FFE0486C4813F0A213 FC007F6D13E000079038003E0013DEA313CFA3148013C714C0A213C314E0A213C114F0A3 EBC0F8A31478147CA2143C143EA2141E141F140FA3EC07BEA3EC03FEEA7FFCEAFFFE1401 A26C486C5A242E7FAD27>II<007FB5FCB612E081816C803907E003FE EC00FF81ED3F80151F16C0150FA6151F1680153FED7F005DEC03FE90B55A5D5D5D92C7FC 01E0C8FCADEA7FFEB5FCA36C5A222E7FAD27>I<387FFFF0B512FE6E7E816C803907E01F F014076E7E1401811400A514015D14034A5A141F90B55A5D5DA281EBE01F6E7E14076E7E A816F0EDF1F8A4397FFE01FBB5EBFFF08016E06C48EB7FC0C8EA1F00252F7FAD27>82 D<90387FC0E03901FFF1F0000713FF5A5AEA3FE0EB801F387F000F007E130712FE5A1403 A3EC01E06C90C7FC127E127FEA3FC013F86CB47E6C13F86C13FE6CEBFF80C614C0010F13 E0010013F0140FEC07F81403140115FC1400127812FCA46CEB01F8A26C130390388007F0 9038F01FE090B5FC15C0150000F85B38701FF81E307CAE27>I<007FB61280B712C0A439 FC03F00FA60078EC0780000091C7FCB3AB90B512C04880A36C5C222E7EAD27>I<3A7FFE 01FFF8B54813FCA36C486C13F83A07E0001F80B3AB6D133F00031500A26D5B0001147E6D 13FE6C6C485A90387F87F814FF6D5B010F13C06D5BD901FEC7FC262F80AD27>I<3A7FFC 03FFE06D5A00FF15F0007F15E0497E3A07E0007E00A46C6C5BA4EBF80100015CA46C6C48 5AA490387E07E0A56D485AA4011F5B149FA3010F90C7FCA5EB07FEA46D5AA26D5A242F7F AD27>II<3A7FFC03FFE06D5A00FF15 F0007F15E0497E3A07F000FE0000035CEBF80100015CA2EBFC0300005CEBFE07017E5BA2 6D485AA290381F9F80A3010F90C7FCA2EB07FEA26D5AA26D5AAF90381FFF80497FA36D5B 242E7FAD27>89 D<387FFFF0B512F8A314F000FCC7FCB3B3ACB512F014F8A36C13F0153A 71B327>91 D<387FFFF0B512F8A37EEA0001B3B3ACEA7FFFB5FCA36C13F0153A7EB327> 93 D<007FB512F8B612FCA46C14F81E067C7E27>95 D<3801FFE0000713F84813FE486D 7E81EBC07FEC0FE0380F8007D802007FC71203A2EB07FF137F0003B5FC120F5A383FFC03 EA7FE0130012FE5AA46C1307007F130FEBC07F6CB612C06C15E07E000313F83A007FC03F C023207D9F27>97 DIIIII<153F90391F C0FF80D97FF313C048B612E05A4814EF390FF07F873A1FC01FC3C0EDC000EB800F48486C 7EA66C6C485AEBC01FA2390FF07F8090B5C7FC5C485BEB7FF0EB1FC090C9FCA27F6CB5FC 15E015F84814FE4880EB8001007EC7EA3F80007C140F00FC15C0481407A46C140F007C15 80007F143F6C6CEB7F009038F807FF6CB55A000714F86C5CC614C0D90FFCC7FC23337EA0 27>II<130F497E497EA4 6D5A6DC7FC90C8FCA7383FFF80487FA37EEA000FB3A4007FB512F0B6FC15F815F07E1D2F 7BAE27>I<143C147E14FFA4147E143C1400A73801FFFE4813FFA37EC7123FB3B0147E12 38007C13FE38FE01FC1303B512F814F06C13E06C13803807FE0018407CAE27>II<387FFF80B57EA37E EA000FB3B2007FB512F8B612FCA36C14F81E2E7CAD27>I<397F07C01F3AFF9FF07FC090 39FFF9FFE091B57E7E3A0FFC7FF1F89038F03FC001E0138001C01300A3EB803EB03A7FF0 FFC3FF486C01E3138001F913E701F813E36C4801C313002920819F27>I<397FE03FC039 FFF1FFF001F77F90B57E6C80000313E0EC007F497F5B5BA25BB03A7FFF83FFF8B500C713 FCA36C018313F82620809F27>II<397FE07F8039FFF1FFE001F713F890B57E6C800003EBC0FF9138007F8001FCEB1F C049130F16E0491307A216F01503A615076D14E0A2150F6DEB1FC06D133F6DEB7F809138 C1FF00ECFFFE5D01F75B01F313E0D9F07FC7FC91C8FCAC387FFF80B57EA36C5B2431809F 27>I<90380FF03C90383FFE7E90B5FC000314FE5A380FFC1F381FE007EBC003383F8001 48C7FC127EA200FE147E5AA67E007E14FEA2007F1301EA3F80EBC003381FE007380FF81F 6CB5FC7E6C147E38007FFCEB0FF090C7FCAC91381FFFF8A24A13FC6E13F8A226317E9F27 >I<397FFC03FC39FFFE0FFF023F13804A13C0007F90B5FC39007FFE1F14F89138F00F80 9138E002004AC7FC5CA291C8FCA2137EAD007FB57EB67EA36C5C22207E9F27>I<9038FF F3800007EBFFC0121F5A5AEB803F38FC000F5AA2EC07806C90C7FCEA7F8013FC383FFFF0 6C13FC000713FF00011480D8000F13C09038003FE014070078EB03F000FC1301A27E1403 6CEB07E0EBE01F90B512C01580150000FB13FC38707FF01C207B9F27>I<133C137EA800 7FB512F0B612F8A36C14F0D8007EC7FCAE1518157EA415FE6D13FC1483ECFFF86D13F06D 13E0010313C0010013001F297EA827>I<397FE007FE486C487EA3007F7F0003EB003FB2 5DA24A5AEBFC076CB612F86C15FCA2013F13BF90390FFC1FF82620809F27>I<3A7FFC0F FF80486C4813C0A36C486C13803A07C000F800EBE00100035CA2EBF00300015CA2EBF807 00005CA390387C0F80A36D48C7FCA3EB3F3FEB1F3EA214FE6D5AA36D5AA26D5A22207E9F 27>I<3A7FFE07FFE000FF15F06D5A497E007F15E03A0F80001F00A36D5B0007143EA414 F0EBC1F83903E3FC7CA4EBE79EA200011478A301F713F8A2EBFF0F6C5CA3EBFE0790387C 03E024207F9F27>I<393FFC1FFF486C5A168016006C487E3901F807E06C6C485A4A5A01 7E90C7FC6D5AEB1F7E5C6D5A13076D5A5C80497E130F497E143EEB3E3FEB7E1F90387C0F 8001F87F00016D7E3803F0033A7FFE1FFF80A2B54813C06C486C1380A222207E9F27>I< 3A7FFC0FFF80486C4813C0A36C486C13803A07E000F800000313015D13F00001130301F8 5B1200A26D485A137CA290387E0F80133EA2011F90C7FC5CA2130F149E14BE130714FC13 03A25C1301A25CA213035CA213075C1208EA3E0F007F5B131FD87E7FC8FCEA7FFE6C5A5B 6C5AEA07C022317E9F27>I<001FB512FE4814FFA490380001FEEC03FCEC07F8EC0FF000 1EEB1FE0C7EA3FC0EC7F80ECFF00495A495A495AEB1FE0495A495A49C7FC485A4848131E 4848133F485A485A485A485AB7FCA46C14FE20207E9F27>II125 DI E %EndDVIPSBitmapFont %DVIPSBitmapFont: Ff ecbx2074 20.74 13 /Ff 13 117 df49 D<92381FFF804AB512FC020FECFF80023F15F091B712FC010316FF010FD9001F14C0D91F F8010380D93FE0010014F8D97F80023F7F4848C86C7F01FC6F7F48486F148048486F14C0 4848817114E0484818F04982003F7113F813F8D87FFE7013FC6D7E6E17FEB56C81A2801A FFA284A56C5BA26C5B6C495DD807FEC9FCD801F818FECBFCA2601AFCA21AF8601AF0601A E095B5FC1AC04D14801A005F614D5B4D5B614D5B4D5B614D90C7FC4D5A4C13F8604C5B4C 5B4C5B4C48C8FC4C5A4C5A5F4C5A4B13804B90C9FC4B5A4B5A4B5A4B48153F4B5A4B5A93 C9FC4A48167E4A5A4A5A4A5A4A5A4A5A4A4816FE4ACAFC495AD903F817FC4A1601495A49 48160F49B9FC5B5B90BAFC5A4819F85AA25A5A5A5ABBFCA21AF0A4487177F05B>I<9238 03FFF8037FEBFFC00203B612FC020F15FF027F16C09127FFFC007F13F0010301C0010F13 FC4948C700037FD91FF86E7FD93FE06E14C049488191C98001FE707F2601FFC08302F081 486D838080486D8384A38192C8FCA46C5F5C6C495F6C5BEB3FE00107C95C90CA5AA26260 6295B55AA24D5C97C7FC4D5B4D5B614D5B4D13C0057F5B4D48C8FC04035B4BB512F04AB6 12804DC9FC17F8EFFFE018FC91C86CB47E050F13E0050313F87113FE716C7E1AC0727F72 7F727F86727F86A2721480A21BC0A21BE084A31BF0A3EA03FE380FFF80487F487F487FA2 B57EA31BE0A260A21BC05C6C1A804A5D4A18006C5B49C9485BEA1FF801E04C5B6C6C4C5B D807FC606C6C4C5B2601FFC092B55A6C01F002035CD93FFF020F49C7FC6D01F8017F5B01 0790B712F0010117C06D6C93C8FC020F15F8020015C0030701F8C9FC4C7379F05B>I<19 7F61A2606060A26060A2606095B5FCA25F5FA25F5F5FA25F5FA217FD1601EE03F917F116 07EE0FE1EE1FC11781163FEE7F01167E16FEED01FCED03F816F01507ED0FE016C0151FED 3F80ED7F00157E15FE4A5A5D14034A5A4A5A5D141F4A5A92C7FC147E14FE495A5C130349 5A5C495A131F495A91C8FC5B13FE5B485A1203485A5B120F485A5B48C9FC5A12FEBDFCA6 CA000391C7FCB3A4030FB9FCA650727BF15B>I<0160EF018001781707017F173F02E0ED 01FF02FE151FDAFFF80107B5120092B75AA261616119C06196C7FC6018F818E018804DC8 FC17F817C0D97E3F49C9FC0200138092CBFCB3923803FFE0033F13FF92B612E0020315F8 020F15FE913B3FFE007FFF80DA7FE0011F7FDAFF80010713F0D97FFCC76C7F4A6E7F02E0 6E7F4A824A6F138091C914C084017E18E0013C8290CA14F0A21AF8A21AFC84A21AFEA51A FFA5EA03F8EA0FFE487E487F487FA2B57EA31AFEA45C4E13FC6C5B91C9FC01FC18F813F0 D83F804C13F0A26C6C18E04E13C06C7E6D93B512806C6C18006C6C4B5B6D5D6C6C6C4A5B 6C6D4A13F0D97FF0023F5BD91FFC91B55A90270FFFC00F91C7FC6D90B612FC010116F06D 6C15C0021F92C8FC020314F09126003FFEC9FC487377F05B>II<952601FFFE160E95B600F0151E050F03FE153E94B8 6C147E040305F014FE041F05FC1301047F9127F0003FFE13034BB500FCC73903FF800703 0702E09138007FE0031F91C9381FF00F037F01F8933807F81F92B500E0933803FC3F0203 4A933800FF7F4A91CBEA7FFF4A49844A01F8844A49844A498491B54884494A844991CDFC 495B491C7F49491A3F5D491C1F49491A0F5D90B51B075D5A481D035D1E014891CEFCA25A 1E005C5AA21F7E485BA31F005AA35CA3B5FCB27EA280A47EA31F7E6C7FA37E80A26C1EFE 1FFC6C80A26F1A016C1EF87E6F1A036D1DF06F1A076D6D1BE06D1C0F6F1BC06D6D1A1F6D F43F806D7F6D6EF17F006D6E19FE6E6D4E5A6E6D18036E6D4E5A6E01FE4E5A6E6D4E5A6E 02C0EF7FC002006E4DC7FC6F01FCEE03FE031F01FFEE0FFC030702E0ED3FF0030102FE4A B45A6F6CD9FFF0013F1380041F91B648C8FC040317F8040017E0050F93C9FC050015F006 0149CAFC6F7A76F784>67 D<92381FFFC00203B512FE023FECFFC091B712F0010316FC01 0FD9E00313FFD91FFCC76C13C0D93FE0021F7FD97F806E7FD9FFF06E7F6E6E7F486D6E7F 6E824870806E8186A2727FA46C496F7FA26C5BEB3FF0EB0FC090CAFCA960040FB6FC0303 B7FC157F0203B5EAFC1F021F140091B512F0010391C7FC010F13FC4913F0017F13C090B5 5A4891C8FC485B485B485B485B5A5C5A4AF007E0A2B5FC5CA260A360A26E92B5FC7E6EEC 01EF17036C6DDA07C79038F80FC06C6DEC0F876C6DDA1F07EBFC1F6C6DDA7E039038FF7F 806C6D6C48486CECFF006C9138E00FF86C6C90B5D8E0005C011F4B013F5B010792C76C13 F0010002F802075B020701C0020090C7FC53507ACE5B>97 D<923801FFFC031FEBFFC092 B612F8020715FE021F6F7E027FD9E03F13E09127FFFE00077F010301F801017F49496D7F 4901C0EC3FFE4949814990C86C138049486F13C013FF4A6F13E05A48496F13F0A2484917 F848831AFCA2484981A24819FEA3485B197F1AFFA3B5FCA491BAFCA402C0CBFCA77EA480 7EA37E80A26C193FA26C6D177F1A7E6C7F6C19FE6EEE01FC6C7F6DEF03F86D6DED07F06D 6DED0FE06D6DED1FC06D01F8ED3F806D6DEDFF006D01FFEC03FE6D6C01E0EB0FFC6E01FE EBFFF8020F90B612E002031680DA007F4AC7FC030F14F0DB007F90C8FC48507BCE53> 101 D<903803FFF8B6FCA6C67E131F7FB3AFF07FF80503B512C0051F14F0057F14FC94B7 FC932603FE0180932707F0007F7FDC0FC06D7F4CC77E043E824C6E7F5E4C80DBF9E082A2 EDFBC0DBFF80808793C8FCA25DA35DA45DB3B3A9B8D8803FB712E0A65B787AF766>104 D<902603FFF8903801FFF0B6021F13FF94B612E0040315FC040F15FF93263FF80114C093 27FFC0003F7FC66CD9F9FEC76C7F011FD9FBF8020713FC6DD9FFF06E7F4C6E7F04806E80 93C96C7FA24B707F4B707F5D747FA2747FA2888688A286A21D80A4861DC0AF501480A51D 0062A26462A264626462646F4C5B816F4C5B97B55A704A91C7FC704A5B04F04A5B704A5B DBF9FC023F5BDBF8FF91B512C093267FF00791C8FC041FB612FC040715F0040115C0DC00 3F49C9FC050713C094CCFCB3A8B87EA65A6F7BCD66>112 D<902603FFF0EB1FF0B6EC7F FE4CB51280040714E04C14F093391FE07FF893393F80FFFCC66CDA7E0113FE011F14FC6D 4A4813FFEDF1F0A2EDF3E016C0A2EDF7807113FE160003FF6D13FCF07FF84BEC1FE0F003 0095C7FCA25DA65DB3B3A6B812F0A6404E7CCD49>114 D<15FCA71401A51403A31407A3 140FA2141FA2143F147F14FFA25B5B5B131F5B90B5FC000F91B612FCB9FCA5D8000701FC C9FCB3B3A4F01F80AF183F6D170081A2187E6D7F18FE6D6E5B6E4A5AEEC0036E6D485A6E 9038F80FE0020790B55A6E5D02004AC7FC031F13F8030113C0396E7DEC47>116 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fg ecti1000 10 21 /Fg 21 121 df<387FFFF8A2B5FCA214F0150579941E>45 D<0103B5D8F80FB512E0A390 260007F8C7381FE0004B5DA2020F153F615DA2021F157F96C7FC5DA2023F5D605DA2027F 14016092C7FCA24A1403605CA249B7FC60A202FCC712070103150F605CA20107151F605C A2010F153F605CA2011F157F95C8FC5CA2013F5D5F5CA2017F14015F91C7FC491403007F D9FE01B512F8B55BA243397CB83E>72 D<902607FFF8923807FFF0614F13E0D9000FEFF0 004F5AA2021F167FF1EFC0141DDA1CFCEC01CF023C16DF9538039F800238ED071FA20278 ED0E3F97C7FC0270151CA202F04B5AF0707E14E0037E14E0010117FE4D485A02C0EC0380 A20103ED0701610280140EA20107ED1C0305385B14006F137049160705E05B010EEC01C0 A2011E913803800F61011CEC0700A2013C020E131F4C5C1338ED1FB80178163F04F091C8 FC01705CA201F04A5B187E00015DD807F816FEB500C09039007FFFFC151E150E4C397AB8 4A>77 D<0107B612F817FF1880903B000FF0003FE04BEB0FF0EF03F8141FEF01FC5DA202 3F15FEA25DA2147FEF03FC92C7FCA24A15F817074A15F0EF0FE01301EF1FC04AEC3F80EF FE0001034A5AEE0FF091B612C04CC7FCD907F8C9FCA25CA2130FA25CA2131FA25CA2133F A25CA2137FA291CAFCA25BA25B1201B512FCA337397BB838>80 D86 DI<14F8EB 07FE90381F871C90383E03FE137CEBF801120148486C5A485A120FEBC001001F5CA2EA3F 801403007F5C1300A21407485C5AA2140F5D48ECC1C0A2141F15831680143F1587007C01 7F1300ECFF076C485B9038038F8E391F0F079E3907FE03FC3901F000F0222677A42A>97 D<147F903803FFC090380FC1E090381F0070017E13784913383901F801F83803F0031207 13E0120FD81FC013F091C7FC485AA2127F90C8FCA35A5AA45AA3153015381578007C14F0 007EEB01E0003EEB03C0EC0F806CEB3E00380F81F83803FFE0C690C7FC1D2677A426>99 DI<147F903803FFC090380FC1E090383F00F0017E13785B485A485A485A120F4913 F8001F14F0383F8001EC07E0EC1F80397F81FF00EBFFF8148090C8FC5A5AA55AA2153000 7C14381578007E14F0003EEB01E0EC03C06CEB0F806CEB3E00380781F83803FFE0C690C7 FC1D2677A426>I105 D108 DII<147F903803FFC090380FC1F090381F00F8 017E137C5B4848137E4848133E0007143F5B120F485AA2485A157F127F90C7FCA215FF5A 4814FEA2140115FC5AEC03F8A2EC07F015E0140F007C14C0007EEB1F80003EEB3F00147E 6C13F8380F83F03803FFC0C648C7FC202677A42A>I<9039078007C090391FE03FF09039 3CF0787C903938F8E03E9038787FC00170497EECFF00D9F0FE148013E05CEA01E113C15C A2D80003143FA25CA20107147FA24A1400A2010F5C5E5C4B5A131F5EEC80035E013F495A 6E485A5E6E48C7FC017F133EEC70FC90387E3FF0EC0F8001FEC9FCA25BA21201A25BA212 03A25B1207B512C0A3293580A42A>I<3903C003F0390FF01FFC391E783C0F381C7C703A 3C3EE03F8038383FC0EB7F800078150000701300151CD8F07E90C7FCEAE0FE5BA2120012 015BA312035BA312075BA3120F5BA3121F5BA3123F90C9FC120E212679A423>114 D<14FE903807FF8090380F83C090383E00E04913F00178137001F813F00001130313F0A2 15E00003EB01C06DC7FC7FEBFFC06C13F814FE6C7F6D13807F010F13C01300143F141F14 0F123E127E00FE1480A348EB1F0012E06C133E00705B6C5B381E03E06CB45AD801FEC7FC 1C267AA422>II<13F8D8 03FEEB01C0D8078FEB03E0390E0F8007121E121C0038140F131F007815C01270013F131F 00F0130000E015805BD8007E133FA201FE14005B5D120149137EA215FE120349EBFC0EA2 0201131E161C15F813E0163CD9F003133814070001ECF07091381EF8F03A00F83C78E090 393FF03FC090390FC00F00272679A42D>I<903907E007C090391FF81FF89039787C383C 9038F03E703A01E01EE0FE3803C01F018013C0D8070014FC481480000E1570023F130000 1E91C7FC121CA2C75AA2147EA214FEA25CA21301A24A1370A2010314F016E0001C5B007E 1401010714C000FEEC0380010F1307010EEB0F0039781CF81E9038387C3C393FF03FF039 07C00FC027267CA427>120 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fh ecbx1000 10 54 /Fh 54 122 df<913803FFC0027F13F00103B512FC010FEB00FED93FF8133FD97FE0EBFF 8049485A5A1480484A13C04A6C1380A36F1300167E93C7FCA592383FFFC0B8FCA4000390 C7FCB3ABB5D8FC3F13FFA4303A7EB935>28 D45 DI<49B4FC01 1F13F0017F13FC9038FF83FE4848C67E4848EB7F804848EB3FC04848EB1FE0A2001F15F0 A24848EB0FF8A3007F15FCA400FF15FEB3007F15FCA5003F15F86D131FA2001F15F0A26C 6CEB3FE0000715C06C6CEB7F806C6CEBFF003900FF83FE6DB45A011F13F0010190C7FC27 377CB530>48 D<141E143E14FE1307137FB5FCA3138FEA000FB3B3A5007FB61280A42136 79B530>IIII<001C15C0D81F80130701F813 7F90B61280A216005D5D15F05D15804AC7FC14F090C9FCA7EB03FE90381FFFE0017F13F8 9038FE07FC9038F003FFD9C0011380496C13C090C7FC000E15E0C8127F16F0A216F8A312 1FEA3FC0487E12FF7FA316F05B15FFD87F8014E0007EC713C0003E5B003F4913806C6C48 1300390FF01FFE6CB512F8000114E06C6C1380D90FF8C7FC25377BB530>II<123C123EEA3FE090B71280A41700485D5E5E5E5E A2007CC7EA0FC000784A5A4BC7FC00F8147E485C5D14014A5AC7485A4A5AA24A5A143F4A C8FCA214FEA213015C1303A21307A2130F5CA2131FA5133FA96D5A6D5A6D5A29397BB730 >I57 DI65 D67 DIII 73 D76 DIIII82 DI<003FB91280A4D9F800EBF003D8 7FC09238007FC049161F007EC7150FA2007C1707A200781703A400F818E0481701A4C892 C7FCB3AE010FB7FCA43B387DB742>III<007FB9FCBA12 80A36C18003905786A4A>95 D97 D<13FFB5FCA412077EAF4AB47E020F13F0 023F13FC9138FE03FFDAF00013804AEB7FC00280EB3FE091C713F0EE1FF8A217FC160FA2 17FEAA17FCA3EE1FF8A217F06E133F6EEB7FE06E14C0903AFDF001FF80903AF8FC07FE00 9039F03FFFF8D9E00F13E0D9C00390C7FC2F3A7EB935>I<903801FFC0010F13FC017F13 FFD9FF8013802603FE0013C048485AEA0FF8121F13F0123F6E13804848EB7F00151C92C7 FC12FFA9127FA27F123FED01E06C7E15036C6CEB07C06C6C14806C6C131FC69038C07E00 6DB45A010F13F00101138023257DA42A>II<903803FF80011F13F0017F13FC3901FF83FE3A03FE007F 804848133F484814C0001FEC1FE05B003FEC0FF0A2485A16F8150712FFA290B6FCA301E0 C8FCA4127FA36C7E1678121F6C6C14F86D14F000071403D801FFEB0FE06C9038C07FC06D B51200010F13FC010113E025257DA42C>II<161FD907FEEBFFC090387FFFE348B6EAEFE02607FE07 138F260FF801131F48486C138F003F15CF4990387FC7C0EEC000007F81A6003F5DA26D13 FF001F5D6C6C4890C7FC3907FE07FE48B512F86D13E0261E07FEC8FC90CAFCA2123E123F 7F6C7E90B512F8EDFF8016E06C15F86C816C815A001F81393FC0000F48C8138048157F5A 163FA36C157F6C16006D5C6C6C495AD81FF0EB07FCD807FEEB3FF00001B612C06C6C91C7 FC010713F02B377DA530>I<13FFB5FCA412077EAFED7FC0913803FFF8020F13FE91381F 03FFDA3C01138014784A7E4A14C05CA25CA291C7FCB3A3B5D8FC3F13FFA4303A7DB935> II<141FEC7FC0ECFFE0A24913F0A56D13E0A2EC7FC0EC1F0091C7FCA9 EC0FF0EB0FFFA4EB007F143FB3B0121FEA3F80EA7FC0EAFFE0EC7FE0A215C014FF6C4813 80903883FE006CB45A000F13F0000113801C4B86BA1D>I<13FFB5FCA412077EAF92380F FFE0A4923803FC0016F0ED0FE0ED1F804BC7FC157E5DEC03F8EC07E04A5A141FEC7FE04A 7E8181A2ECCFFEEC0FFF496C7F806E7F6E7F82157F6F7E6F7E82150F82B5D8F83F13F8A4 2D3A7EB932>I<13FFB5FCA412077EB3B3ACB512FCA4163A7DB91B>I<01FED97FE0EB0FFC 00FF902601FFFC90383FFF80020701FF90B512E0DA1F81903983F03FF0DA3C0090388780 1F000749DACF007F00034914DE6D48D97FFC6D7E4A5CA24A5CA291C75BB3A3B5D8FC1FB5 0083B512F0A44C257DA451>I<01FEEB7FC000FF903803FFF8020F13FE91381F03FFDA3C 011380000713780003497E6D4814C05CA25CA291C7FCB3A3B5D8FC3F13FFA430257DA435 >I<903801FFC0010F13F8017F13FFD9FF807F3A03FE003FE048486D7E48486D7E48486D 7EA2003F81491303007F81A300FF1680A9007F1600A3003F5D6D1307001F5DA26C6C495A 6C6C495A6C6C495A6C6C6CB45A6C6CB5C7FC011F13FC010113C029257DA430>I<9039FF 01FF80B5000F13F0023F13FC9138FE07FFDAF00113800003496C13C00280EB7FE091C713 F0EE3FF8A2EE1FFCA3EE0FFEAA17FC161FA217F8163F17F06E137F6E14E06EEBFFC0DAF0 0313809139FC07FE0091383FFFF8020F13E0020390C7FC91C9FCACB512FCA42F357EA435 >I<9038FE03F000FFEB0FFEEC3FFF91387C7F809138F8FFC000075B6C6C5A5CA2913880 7F80ED3F00150C92C7FC91C8FCB3A2B512FEA422257EA427>114 D<90383FF0383903FFFEF8000F13FF381FC00F383F0003007E1301007C130012FC15787E 7E6D130013FCEBFFE06C13FCECFF806C14C06C14F06C14F81203C614FC131F9038007FFE 140700F0130114007E157E7E157C6C14FC6C14F8EB80019038F007F090B512C000F81400 38E01FF81F257DA426>I<130FA55BA45BA25B5BA25A1207001FEBFFE0B6FCA3000390C7 FCB21578A815F86CEB80F014816CEBC3E090383FFFC06D1380903803FE001D357EB425> I<01FFEC3FC0B5EB3FFFA4000714016C80B3A35DA25DA26C5C6E4813E06CD9C03E13FF90 387FFFFC011F13F00103138030257DA435>IIIII E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fi ecbx2488 24.88 35 /Fi 35 122 df45 D[<97263FFFE017E0071FB616010603B700 F01503063F04FC15074DB96C140F050F06E0141F053F18F84CB7D8000101FE143F040703 C09026000FFF147F041F02FCC8000101C013FF047F02C06F6C6C5A93B6CA381FF8030303 02F8943807FC074B02E0EF03FE031F0280943800FF0F4B91CCEA7F9F4B01FC73B5FC4AB5 48854A4A19074A02C0854A4A854A91CDFC4A49864A498791B54887498A5E494A87494A87 5B4C874991CFFC8C495B498A5D90B51E7FA2485C213F485C211FA2485CA248200FA25D5A A22107A2485CA29EC7FCA25AA492D3FCA3B6FCB3A27EA381A47EA46C80F907E0A37E81A2 7E210F6C6E1EC0A36C80211F6C6E1E80A26D1F3F6F1E007F6D6D65701C7E6D1FFE70646D 1E016D6E515A6D8070515A6D1E0F6E6D646E6D515A6E6D515A6E6E1A7F6E6E50C7FC6E02 F04F5A6E6E4F5A6E6C6D4F5A6F01FFF11FF06F02C04E5A03076EF0FFC06F02F84D90C8FC 030002FFEF07FE7002E0EE1FFC041F02FCEEFFF00407DAFFC002075B040103FF91B51280 DC003F92B648C9FC050F18F8050118E0DD003F94CAFC060316F8DE001F1580DF003F01F0 CBFC>131 146 116 271 156 67 D[146 142 121 269 166 I[129 141 122 268 142 I[120 141 122 268 136 I[67 142 122 269 79 73 D[114 142 122 269 130 76 D[188 142 120 269 205 I[128 142 121 269 148 80 D[151 144 121 269 160 82 D[<93263FFF80ED03800307B500FC1507033FDAFFC0140F4AB712F802 0704FE141F021F706C133F027F05E0137F91B526E0007F6D13FF010349C7000313FC4901 F09139007FFE014901C092380FFF034949030313874990CA13E7D97FFCEF7FEF4948051F B5FC48854A8348498348498386484984875A91CC7E875A4985A2007F86A287A28712FFA2 1C7F7FA36E193FA280A2801C1F80806C7F6E96C7FC80816C14E08115FE6CECFFC016FC6C EDFFC017FC6CEEFFC018FC6CEFFFE019FE6CF0FFC06C19F86D18FE6D727E1BE06D856D19 FC0103856D856D86023F19E06E8514070201856E6C84030F84030184ED001F04011880EE 001F050017C0180F060016E0190F070115F0F1003F7414F81A07867414FC868787871DFE 8712FC87A287A287A37E87A37E1DFCA37FA26D1BF8637FA26D1BF07F5113E07F6D616D1B C06E606E1A806E4E13006E6002FC616E4E5A6E6C4D5A01F36D5E01F001F804075B9026E0 7FFE4C13C09027C03FFFC0033F5BD9800F01FC4AB5C7FC0203D9FFF8011F5B90C791B712 F848023F17E048020F17804802014CC8FCDB003F15F8480303158048DB000F01F8C9FC> 95 146 116 271 120 I[151 144 121 269 166 85 D[154 144 124 269 163 I<93387FFF80030FB512FC92B712C0020316F8020F16FE023FD980076D7E DAFFF8C780490180023F13F0D907FEC86C7FD90FF86F13FE49486F7F02C06F80D93FF86F 80D97FFE816E6C8390B56C6F7FA26F6F7F5A6F838587A385876C5CA26D5BA26D5BD90FFE C9FCEB03F890CBFCA90603B6FC051FB7FC040FB8FC93B9FC030FECFC0F037F14000203B5 12E0021F91C7FC027F13F849B512E0010714804949C8FC013F5B495B90B55A485C485C48 5C4891C9FCA2485BA2485BF507E0485BA3B5FC5C61A461193B197B806C18F3806CDD01E3 EC800F6EDB03C116C06C6D15076CDD0F80ECC01F6F4A489138E03F806C02E0023E6D9038 F07F0000016E02FC92B5FC6C02FCD903F86D5C013F9027FF803FF06D5C010F91B500C06D 5C010393C700035CD9007F02FC6E14C0020F02F06E6C90C7FCDA003F90C9EA0FF8635F79 DD6C>97 D[ 106 144 122 270 120 I<933801FFFC043FEBFFE00303B612FE031F6F7E037F16E04AB5 D8C00313F8020701FCC7EA3FFE4A01F0EC03FF023F01C0020013C04A49ED3FE049B5C96C 7E494916074949EE3FF84949EEFFFC49491503494D7F5D49495D90B5844B5D5A4891C9FC A25A5C5A735B5A4A705BA248725B070013E0F23F8097C8FC5A5CA5B5FCB07EA380A37EA3 6C7FA37E6EF00FC07E1B1F6C6E1880A26C6E173F1C006C6E5F6D197E6F17FE6D6D4C5A6D 6D4C5A7F6D6D4C5A6D6D4C5A6D02C04B5A6D6EED7F80023F01F84BC7FC6E6DEC03FC0207 D9FF80EB0FF8020102F8EBFFE06E6C90B65A031F93C8FC030315F8DB003F14C0040101F8 C9FC525F79DD60>I[106 144 121 270 120 I<933803FFF8047FEBFFC00307B612FC033F15FF92B812C00203DA80 7F13F04A9026FC000F13FC021F01E001037F4A4901007F91B5C86C7F49496F7F49496F7F 49496F7F49496F7F49498349834949838590B54883488492CA14805A7413C0485BA2481B E04A835AA21CF05AA2865C5A1CF8A4B5FCA391BBFCA402F8CDFCAA7EA4807EA37EA2807E A2F301F86C7F1B036C1BF06C801B076C6E18E06D190F6FEF1FC06D1A806D6D173F6D6DEF 7F006D6D17FE6D6D4C5A6D6D4C5A6D6E4B5A6E01E0ED1FE0021F01F8ED7FC06E01FE4A48 5A0203D9FFC0D907FEC7FC020002FCEBFFFC033F90B612F0030F16C003014BC8FCDB001F 14F0040091C9FC555F7ADD62>I[<943801FFF0057F13FE0407B67E043F8193B712F00303 9138007FF8030F01F8804B01E0497E037F495A92B5C6487F4A495B5C4A494914804A5B4A 5BA24A5BA25C5E91B56E1400A2725B4C6D5B499338007FF0F11FC096C8FCB3A8BAFCA7D8 000102C0CAFCB3B3B3B3A6007FB812F0A7>73 144 122 271 66 II[107 143 121 270 120 I[46 144 121 271 60 I[104 143 122 270 114 107 D[47 143 121 270 60 IIIII<03FFEC1FF890B691B5FCB7010314E0050F804D14 FC94393FF00FFE94397F003FFF05FE491380DC01F890B5FCD8003F4A484814C0010F15E0 6D4A484814E06D1580160F17005E161E5EA27214C05E72148004706E130004F06E5AF10F F84C91C8FCA55EA65EB3B3AEB912E0A74B5D7ADC57>114 D<92263FFF80EB0380020FB5 00FC1307027F02FF131F49B7EAE03F0107EEF07F011F903AC0007FFCFFD97FFCC7000FB5 FCD9FFE0140148496E7E4890C97E484882000F83498248488284123F4982007F187FA319 3F12FF7FA2191F7F7F7F80806E93C7FC14F86C13FF15F0EDFF806C15FCEEFFE06C16FEEF FFC06C17F06C17FC18FF6C846C18E06C84013F836D830107836D8301001880143F020717 C0DA007F16E01507DB001F15F01600050F14F81701717E8400FC050F13FC84846C83A284 A26C187FA2193F7FA26D18F8A27FA26D18F0197F7F6D18E019FF6D18C06D5E6E4B13806E 4B130002F04B5A6E4B5AD9E7FEED7FF89026C1FF8049485A018001F8011F13C026FE003F B75A48010F4BC7FC48010315F0480100158048020701F0C8FC465F79DD55>I[67 132 124 258 84 II I<007FB8020FB712C0A7C702FCC96C01FCC7FC70040790C8FC6EF003FC6E6D4C5A6E6E5E 71150F6E4E5A6E6E4B5A714B5A6E96C9FC6E6E5D6E6E4A5A714A5A6F4C5A6F6D5D6F6E49 5A72131F6F4C5A6F6E495A6F6E91CAFC7213FE6F15016F6E485A706D485A06FF5B704A5A 70149FF1FFC0705D7092CBFC705CA2705C82717F85837180718086837180864D805F864D 804D81EF7F9FDDFF0F8005FE8104017F4C486C804C486C80DC0FF0814D7E4C486D7F043F 6E7F4C48824CC77E4C6E804B486E800303844B48804B486E804C834B486E80033F824B48 6F7F4BC9814A48824B7080020371804A48854A48824A487080DA7FF87080010FB585B700 FC4AB812FCA76E5C7EDB72>120 DI E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fj ectt1000 10 61 /Fj 61 122 df<003C131E007F137F481480A66C1400A6007E7FA6003E133EA3003C131E 001C131C191977B32C>34 D 36 D<143814FC13011303EB07F8EB0FF0EB1FC0EB3F80EB7F0013FE485A485A5B12075B 120F5B485AA2123F90C7FCA25A127EA312FE5AAC7E127EA3127F7EA27F121FA26C7E7F12 077F12037F6C7E6C7E137FEB3F80EB1FC0EB0FF0EB07F8EB03FC130113001438164272B9 2C>40 D<127012FC7E7E6C7E6C7EEA0FE06C7E6C7E6C7E6C7E137F7F1480131F14C0130F EB07E0A214F01303A214F81301A314FC1300AC130114F8A3130314F0A2130714E0A2EB0F C0131F1480133F14005B13FE485A485A485A485AEA3FC0485A48C7FC5A5A1270164279B9 2C>I44 D<007FB512F0B612F8A36C14F0 1D0579942C>I<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B708A2C>I<1507 ED0F80A2151F16005D153E157E157CA215FC5D14015D14035D14075D140F5D141F92C7FC 5C143EA2147E147C14FC5C13015C13035C13075C130F5C131F91C8FC5B133EA2137E137C 13FC5B12015B12035B12075B120F5B121F90C9FCA25A123E127E127C12FC5AA212702141 7BB92C>II<1307497EA2131FA2133F 137F13FF5A1207127FB5FC13DF139FEA7C1F1200B3AE007FB512E0B612F0A36C14E01C34 77B32C>IIII<000FB512FE48 80A35D0180C8FCADEB83FE90389FFF8090B512E015F8819038FE03FE9038F000FF01C07F 49EB3F8090C7121F6C15C0C8120FA2ED07E0A4123C127EB4FC150F16C0A248141F007EEC 3F80007FEC7F006C6C5B6D485A391FF80FFC6CB55A6C5C000114C06C6C90C7FCEB0FF823 347CB22C>II<1278B712C016 E0A316C000FCC7EA3F80ED7F0015FE00785CC712014A5A4A5A5D140F5D4A5A143F92C7FC 5C147E14FE5C13015CA2495AA213075CA3495AA4495AA5133F91C8FCAA131E23357CB32C >III<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F 00C7FCAE121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B2470A32C>I<007FB612 F0B712F8A36C15F0CAFCA8007FB612F0B712F8A36C15F025127DA12C>61 D64 D<02FF13700107EBE0F84913F9013F13FD4913FFEBFF813901 FE007F4848131FD807F0130F1507485A491303485A150148C7FCA25A007EEC00F01600A2 12FE5AAB7E127EA3007F15F06CEC01F8A26C7EA26C6C13036D14F06C6C130716E0D803FC 131F6C6CEB3FC03A00FF81FF806DB512006D5B010F5B6D13F00100138025357DB32C>67 D<007FB612F0B712F8A37E3903F00001A7ED00F01600A4EC01E04A7EA490B5FCA5EBF003 A46E5A91C8FCA5163C167EA8007FB612FEB7FCA36C15FC27337EB22C>69 D72 D<007FB512F8B612FCA36C14F83900 0FC000B3B3A5007FB512F8B612FCA36C14F81E3379B22C>I77 D79 D<007FB512C0B612F88115FF6C15802603F00013C0153FED0FE0ED07F0A2150316F81501 A6150316F01507A2ED0FE0ED3FC015FF90B61280160015FC5D15C001F0C8FCB0387FFF80 B57EA36C5B25337EB22C>I<387FFFFCB67E15E015F86C803907E007FE1401EC007F6F7E 151FA26F7EA64B5AA2153F4BC7FCEC01FE140790B55A5D15E081819038E007FCEC01FE14 00157F81A8160FEE1F80A5D87FFEEB1FBFB5ECFF00815E6C486D5AC8EA01F029347EB22C >82 D<90381FF80790B5EA0F804814CF000714FF5A381FF01F383FC003497E48C7FC007E 147F00FE143F5A151FA46CEC0F00007E91C7FC127F7FEA3FE0EA1FFCEBFFC06C13FC0003 EBFFC06C14F06C6C7F01077F9038007FFEEC07FF02001380153FED1FC0A2ED0FE0A20078 140712FCA56CEC0FC0A26CEC1F806D133F01E0EB7F009038FE01FF90B55A5D00F914F0D8 F83F13C0D8700790C7FC23357CB32C>I<007FB612FCB712FEA43AFC007E007EA7007815 3CC71400B3AF90383FFFFCA2497F6D5BA227337EB22C>I86 DI<387FFFFCB512FEA314FC00FCC7FCB3B3B3B512FC14 FEA36C13FC17416FB92C>91 D<387FFFFCB512FEA37EC7127EB3B3B3387FFFFEB5FCA36C 13FC17417DB92C>93 D<007FB6FCB71280A46C150021067B7D2C>95 D<3801FFF0000713FE001F6D7E15E048809038C01FF81407EC01FC381F80000006C77EC8 127EA3ECFFFE131F90B5FC1203120F48EB807E383FF800EA7FC090C7FC12FE5AA47E007F 14FEEB8003383FE01F6CB612FC6C15FE6C14BF0001EBFE1F3A003FF007FC27247CA32C> 97 DI<903803FFE0011F13F8017F13FE48B5FC48804848C6FCEA0FF0485A49137E 4848131890C9FC5A127EA25AA8127EA2127F6C140F6DEB1F806C7E6D133F6C6CEB7F0039 07FE03FF6CB55A6C5C6C6C5B011F13E0010390C7FC21247AA32C>IIII II< 1307EB1FC0A2497EA36D5AA20107C7FC90C8FCA7387FFFC080B5FC7EA2EA0007B3A8007F B512FCB612FEA36C14FC1F3479B32C>I<140EEC3F80A2EC7FC0A3EC3F80A2EC0E0091C7 FCA748B512804814C0A37EC7120FB3B3A2141F003C1480007E133FB414005CEB01FEEBFF FC6C5B5C001F5B000790C7FC1A467CB32C>II<387FFFE0B57EA37EEA0003B3B3A5007F B61280B712C0A36C158022337BB22C>I<3A7F83F007E09039CFFC1FF83AFFDFFE3FFCD8 7FFF13FF91B57E3A07FE1FFC3E01FCEBF83F496C487E01F013E001E013C0A301C01380B3 3B7FFC3FF87FF0027F13FFD8FFFE6D13F8D87FFC4913F0023F137F2D2481A32C>I<397F F01FE039FFF87FFC9038F9FFFE01FB7F6CB6FC00019038F03F80ECC01F02807FEC000F5B 5BA25BB3267FFFE0B5FCB500F11480A36C01E0140029247FA32C>II<397FF01FE0 39FFF8FFF801FB13FE90B6FC6C158000019038F07FC09138801FE091380007F049EB03F8 5BED01FC491300A216FE167EA816FE6D14FCA2ED01F86D13036DEB07F0150F9138801FE0 9138E07FC091B51280160001FB5B01F813F8EC3FC091C8FCAD387FFFE0B57EA36C5B2736 7FA32C>I<903903FC078090391FFF0FC0017F13CF48B512EF4814FF3807FE07380FF001 48487E49137F4848133F90C7FC48141F127E150F5AA87E007E141FA26C143F7F6C6C137F 6D13FF380FF0033807FC0F6CB6FC6C14EF6C6C138F6D130FEB07F890C7FCAD0203B5FC4A 1480A36E140029367DA32C>II<90387FF8700003B512F8120F5A5A387FC00F387E00034813015AA36CEB 00F0007F140013F0383FFFC06C13FE6CEBFF80000314E0C66C13F8010113FCEB0007EC00 FE0078147F00FC143F151F7EA26C143F6D133E6D13FE9038F007FC90B5FC15F815E000F8 148039701FFC0020247AA32C>I<131E133FA9007FB6FCB71280A36C1500D8003FC8FCB1 ED03C0ED07E0A5EC800F011FEB1FC0ECE07F6DB51280160001035B6D13F89038003FE023 2E7EAD2C>I<3A7FF003FF80486C487FA3007F7F0001EB000FB3A3151FA2153F6D137F39 00FE03FF90B7FC6D15807F6D13CF902603FE07130029247FA32C>I<3A7FFF01FFFCB514 FE148314016C15FC3A03E0000F80A26D131F00011500A26D5B0000143EA26D137E017C13 7CA2017E13FC013E5BA2EB3F01011F5BA21483010F5BA214C701075BA214EF01035BA214 FF6D90C7FCA26D5A147C27247EA32C>II<3A3FFF03FFF048018713F8A36C010313F03A00FC007E005D90387E01F8013F5BEB1F 83EC87E090380FCFC0903807EF80EB03FF6D90C7FC5C6D5A147C14FE130180903803EF80 903807CFC0EB0FC7EC83E090381F01F0013F7FEB7E00017C137C49137E0001803A7FFF01 FFFC1483B514FE6C15FC140127247EA32C>I<3A7FFF01FFFCB5008113FE148314816C01 0113FC3A03E0000F806C7E151F6D140012005D6D133E137C017E137E013E137CA2013F13 FC6D5BA2EB0F815DA2EB07C1ECC3E0A2EB03E3ECE7C0130114F75DEB00FFA292C7FC80A2 143EA2147E147CA214FC5CA2EA0C01003F5BEA7F83EB87E0EA7E0F495A387FFF806C90C8 FC6C5A6C5AEA07E027367EA32C>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fk ecrm1000 10 71 /Fk 71 123 df27 DII<007C137C00FE13FEEAFF01A3EAFE00A7007E13FC007C137CA8003C13780038 1338A700181330171E77BA2A>34 D<121C127FEAFF80A213C0A3127F121C1200A4120113 80A2120313005A1206120E5A5A5A12600A1979B917>39 D<146014E0EB01C0EB0380EB07 00130E131E5B5BA25B485AA2485AA212075B120F90C7FCA25A121EA2123EA35AA65AB212 7CA67EA3121EA2121F7EA27F12077F1203A26C7EA26C7E1378A27F7F130E7FEB0380EB01 C0EB00E01460135278BD20>I<12C07E12707E7E7E120F6C7E6C7EA26C7E6C7EA21378A2 137C133C133E131EA2131F7FA21480A3EB07C0A6EB03E0B2EB07C0A6EB0F80A31400A25B 131EA2133E133C137C1378A25BA2485A485AA2485A48C7FC120E5A5A5A5A5A13527CBD20 >I<121C127FEAFF80A213C0A3127F121C1200A412011380A2120313005A1206120E5A5A 5A12600A19798817>44 DI<121C127FEAFF80A5EA7F00121C09 09798817>I<1506A2150E150CA2151C151815381530A215701560A215E015C0A2140115 80A2140315005C1406A2140E140CA2141C1418A214381430A21470146014E05CA213015C A2130391C7FCA25B1306A2130E130C131C1318A213381330A213701360A213E05BA21201 5B120390C8FCA25A1206A2120E120CA2121C1218A21238123012701260A212E05AA21F53 7BBD2A>IIIII<1538A2157815F8A2 140114031407A2140F141F141B14331473146314C313011483EB030313071306130C131C 131813301370136013C01201EA038013005A120E120C5A123812305A12E0B712F8A3C738 03F800AA4A7E0103B512F8A325387EB72A>I<0006140CD80780133C9038F003F890B5FC 5D5D158092C7FC14FC38067FE090C9FCAAEB07F8EB1FFE9038780F809038E007E03907C0 03F0496C7E130000066D7E81C8FC8181A21680A4121C127F5A7FA390C713005D12FC0060 5C12704A5A6C5C6C1303001E495A6C6C485A3907E03F800001B5C7FC38007FFCEB1FE021 397CB62A>II<12301238123E003FB612E0A316C0 5A168016000070C712060060140E5D5D00E014304814705D5DC712014A5A4AC7FC140614 0E5CA25C1478147014F05C1301A213035C1307A2130FA3131F5CA2133FA5137FA96DC8FC 131E233A7BB72A>III<121C127F EAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C092479A317>I<121C127F EAFF80A5EA7F00121CC7FCB2121C127FEAFF80A213C0A3127F121C1200A412011380A212 0313005A1206120E5A5A5A12600A3479A317>I<1538A3157CA315FEA34A7EA34A6C7EA2 02077FEC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A202707FEC6003A202 C07F1501A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7121FA2496E7E A3496E7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512FEA3373C7DBB 3E>65 DI<913A01FF800180020FEBE003027F13F8903A01FF807E07 903A03FC000F0FD90FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE153F12014848 151F4848150FA248481507A2485A1703123F5B007F1601A35B00FF93C7FCAD127F6DED01 80A3123F7F001F160318006C7E5F6C7E17066C6C150E6C6C5D00001618017F15386D6C5C D91FE05C6D6CEB03C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F13F0020113 80313D7BBA3C>IIIIIII<01 3FB512E0A39039001FFC00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380D87F005B0070 131F6C5C6C495A6C49C7FC380781FC3801FFF038007F80233B7DB82B>I76 DIIII82 D I<003FB812E0A3D9C003EB001F273E0001FE130348EE01F00078160000701770A3006017 30A400E01738481718A4C71600B3B0913807FF80011FB612E0A335397DB83C>IIII<007FB81280B912C0A26C17803204797041>95 D97 DIIII<147E903803FF8090380FC1E0EB1F8790383F0FF0137EA213 FCA23901F803C091C7FCADB512FCA3D801F8C7FCB3AB487E387FFFF8A31C3B7FBA19>I< ED03F090390FF00FF890393FFC3C3C9039F81F707C3901F00FE03903E007C03A07C003E0 10000FECF000A248486C7EA86C6C485AA200075C6C6C485A6D485A6D48C7FC38073FFC38 060FF0000EC9FCA4120FA213C06CB512C015F86C14FE6CECFF804815C03A0F80007FE048 C7EA0FF0003E140348140116F8481400A56C1401007C15F06CEC03E0003F1407D80F80EB 0F80D807E0EB3F003901FC01FC39007FFFF0010790C7FC26387EA52A>IIIIII<2703F00FF0EB1FE000FFD93FFCEB7FF8913AF03F01E07E903BF1C01F8380 3F3D0FF3800FC7001F802603F70013CE01FE14DC49D907F8EB0FC0A2495CA3495CB3A348 6C496CEB1FE0B500C1B50083B5FCA340257EA445>I<3903F00FF000FFEB3FFCECF03F90 39F1C01F803A0FF3800FC03803F70013FE496D7EA25BA35BB3A3486C497EB500C1B51280 A329257EA42E>II<3903F01FE000FFEB7FF89038F1E07E9039F3801F 803A07F7000FC0D803FEEB07E049EB03F04914F849130116FC150016FEA3167FAA16FEA3 ED01FCA26DEB03F816F06D13076DEB0FE001F614C09039F7803F009038F1E07E9038F0FF F8EC1FC091C8FCAB487EB512C0A328357EA42E>II<3807E01F00FFEB7FC09038E1E3 E09038E387F0380FE707EA03E613EE9038EC03E09038FC0080491300A45BB3A2487EB512 F0A31C257EA421>II<1318A51338A31378A313F8120112031207001FB5FCB6FCA2D801F8C7FCB215 C0A93800FC011580EB7C03017E13006D5AEB0FFEEB01F81A347FB220>IIIIII<00 3FB512FCA2EB8003D83E0013F8003CEB07F00038EB0FE012300070EB1FC0EC3F80006013 7F150014FE495AA2C6485A495AA2495A495A495AA290387F000613FEA2485A485A000714 0E5B4848130C4848131CA24848133C48C7127C48EB03FC90B5FCA21F247EA325>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fl ecss2074 20.74 18 /Fl 18 118 df45 D76 DI80 D82 D<923801FFF8033FEBFFE04AB612FC0207EDFF80021F16E0027F16F8 91B812FE0103EFFF80499026FE000F14C04901E0EB007F490180140F4948C800031380D9 7FF815004948167F02C0161F4849160F4890CA120749EF0100000795C7FC5B485AA2485A A35B123FA87FA2121F7FA27F120F7F7F6C7F806C7F6C7F14FC6C13FF6D13C06D13F86DEB FF806D14F86D14FF6D15F06D15FF6D6C15E06E15F8020F15FE020381DA007F15C0030781 030081040F80040080050F7F05017F716C1380061F13C018077213E07213F084F17FF819 3FF11FFCA2190FF107FEA319031AFFA285A91AFE1903A3F107FCA20020180F007019F800 7C181F007E19F0007F183F01C0EF7FE06DEFFFC0D8FFF85E01FE4C13806D6C030F13006C 01E04B5A001F01FCED7FFC6CD9FF80903803FFF8000302FC013F5BC691B75A6D5F010F94 C7FC010316FCD9007F15F0020F15C002014AC8FCDA000713E0487979F659>I86 D<91380FFF8049B512F0010F14FC017F14FF48B712C0000782001F824882DAE000 7F49C7EA3FFE01F8140FD81FC06E7E90C86C1380121E00186F13C0001081CAFCEF7FE0A3 18F0173FAD93B5FC157F0207B6FC143F49B7FC1307011F153F017FEBF80090B512804801 F8C7FC4813C04890C8FCEA0FFC485A485A5B485A5BA248C9FCA5177FA26D15FFA26C6C5C 6D5C6D140F6C6C5C01FF91B5FC6CEBE00791B612BF6CEDFE3F16FC6C15F06C15C06CECFE 006C6C13F0D91FFCC9FC344C77CA4C>97 D99 DIIII108 D110 DI114 D117 D E %EndDVIPSBitmapFont end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%PaperSize: A4 end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 53 144 a Fl(S-Lang)54 b(PVM)e(Mo)t(dule)i (Reference)p 0 257 3600 24 v 0 371 a Fk(John)27 b(C.)h(Houc)n(k,)f Fj(houck@space.mit)o(.e)o(du)1711 b Fk(Oct)27 b(28,)g(2005)p eop end %%Page: 2 2 TeXDict begin 2 1 bop 0 -167 3600 5 v 0 -200 a Fk(2)p eop end %%Page: 3 3 TeXDict begin 3 2 bop 0 846 a Fi(Con)-6 b(ten)g(ts)0 1418 y Fh(1)77 b(In)m(tro)s(duction)32 b(to)f(the)h(PVM)g(Mo)s(dule) 2008 b(5)0 1657 y(2)77 b(Using)31 b(the)g(PVM)h(Mo)s(dule)2413 b(7)0 1897 y(3)77 b(Examples)3025 b(9)125 2053 y Fk(3.1)83 b(Example)28 b(1:)37 b(A)27 b(Simple)i Fg(Hel)t(lo)h(W)-6 b(orld)37 b Fk(Program)45 b(.)c(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)157 b(9)315 2210 y(3.1.1)94 b(The)28 b Fj(hello_master)22 b Fk(program)k(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)157 b(9)315 2366 y(3.1.2)94 b(The)28 b Fj(hello_slave)23 b Fk(program)69 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(11)125 2523 y(3.2)83 b(Example)28 b(2:)37 b(Using)27 b(the)h(Master-Sla)n(v)n (e)d(In)n(terface)73 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(11)315 2679 y(3.2.1)94 b(The)28 b Fj(master)d Fk(program)k(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(12)315 2836 y(3.2.2)94 b(The)28 b Fj(slave)d Fk(program)73 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(12)0 3075 y Fh(4)77 b(Master-Sla)m(v)m(e)32 b(F)-8 b(unction)32 b(Reference)1999 b(13)125 3232 y Fk(4.1)83 b Fh(p)m(vm_ms_kill)31 b Fk(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(13)125 3388 y(4.2)83 b Fh(p)m(vm_ms_set_n)m(um_pro)s(cesses_p)s(er_host)23 b Fk(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)116 b(13)125 3545 y(4.3)83 b Fh(p)m(vm_ms_set_debug) 41 b Fk(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) 116 b(14)125 3701 y(4.4)83 b Fh(p)m(vm_ms_sla)m(v)m(e_exit)54 b Fk(.)41 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) 116 b(14)125 3858 y(4.5)83 b Fh(p)m(vm_ms_run_sla)m(v)m(e)67 b Fk(.)41 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) 116 b(15)125 4015 y(4.6)83 b Fh(p)m(vm_ms_run_master)45 b Fk(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(15)125 4171 y(4.7)83 b Fh(p)m(vm_ms_add_new_sla)m(v)m(e)78 b Fk(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(16)125 4328 y(4.8)83 b Fh(p)m(vm_ms_set_message_callbac)m(k)65 b Fk(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(16)125 4484 y(4.9)83 b Fh(p)m(vm_ms_set_sla)m(v)m(e_exit_failed_callbac)m(k)60 b Fk(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)116 b(17)125 4641 y(4.10)41 b Fh(p)m(vm_ms_set_sla)m(v)m (e_spa)m(wned_callbac)m(k)36 b Fk(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(18)125 4797 y(4.11)41 b Fh(p)m(vm_ms_set_idle_host_callbac)m(k)68 b Fk(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(18)125 4954 y(4.12)41 b Fh(p)m(vm_ms_set_hosts)78 b Fk(.)41 b(.)h(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(19)0 5193 y Fh(5)77 b(PVM)31 b(Mo)s(dule)f(F)-8 b(unction)32 b(Reference)1964 b(21)125 5350 y Fk(5.1)83 b Fh(p)m(vm_send_ob)5 b(j)22 b Fk(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) f(.)h(.)g(.)f(.)116 b(21)1779 5560 y(3)p eop end %%Page: 4 4 TeXDict begin 4 3 bop 0 -167 3600 5 v 0 -200 a Fk(4)3019 b Fh(CONTENTS)125 104 y Fk(5.2)83 b Fh(p)m(vm_recv_ob)5 b(j)35 b Fk(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) f(.)h(.)f(.)h(.)g(.)f(.)116 b(21)125 261 y(5.3)83 b Fh(p)m(vm_con\034g) 46 b Fk(.)c(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) f(.)h(.)f(.)h(.)g(.)f(.)116 b(22)125 417 y(5.4)83 b Fh(p)m(vm_kill)30 b Fk(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(22)125 574 y(5.5)83 b Fh(p)m(vm_initsend)23 b Fk(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(23)125 730 y(5.6)83 b Fh(p)m(vm_pac)m(k)38 b Fk(.)j(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(23)125 886 y(5.7)83 b Fh(p)m(vm_send)38 b Fk(.)j(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(23)125 1043 y(5.8)83 b Fh(p)m(vm_recv)51 b Fk(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) h(.)f(.)h(.)g(.)f(.)116 b(24)125 1199 y(5.9)83 b Fh(p)m(vm_unpac)m(k)61 b Fk(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) h(.)f(.)h(.)g(.)f(.)116 b(24)125 1356 y(5.10)41 b Fh(p)m(vm_psend)49 b Fk(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) f(.)h(.)f(.)h(.)g(.)f(.)116 b(25)125 1512 y(5.11)41 b Fh(p)m(vm_addhosts)53 b Fk(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(25)125 1669 y(5.12)41 b Fh(p)m(vm_delhosts)81 b Fk(.)42 b(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)116 b(25)0 1908 y Fh(6)77 b(Mo)s(dule)30 b(Sym)m(b)s(ols)f(Lac)m(king)k(Do) s(cumen)m(tation)1657 b(27)p eop end %%Page: 5 5 TeXDict begin 5 4 bop 0 801 a Ff(Chapter)61 b(1)0 1296 y Fi(In)-6 b(tro)6 b(duction)73 b(to)f(the)g(PVM)g(Mo)6 b(dule)0 1787 y Fk(PVM)30 b(\(P)n(arallel)e(Virtual)h(Mac)n(hine\))g (is)g(a)g(soft)n(w)n(are)f(pac)n(k)-5 b(age)27 b(whic)n(h)i(p)r(ermits) h(a)e(heterogeneous)g(collection)g(of)0 1901 y(Unix)37 b(and/or)f(Windo)n(ws)g(computers,)j(connected)e(b)n(y)g(a)g(net)n(w)n (ork,)h(to)f(b)r(e)g(used)g(as)f(a)h(single)g(large)e(parallel)0 2015 y(computer.)h(The)28 b Fj(PVM)e Fk(mo)r(dule)i(pro)n(vides)e(a)h Fh(S-lang)h Fk(in)n(terface)e(to)i(this)g(pac)n(k)-5 b(age.)35 b(By)27 b(p)r(erforming)g(distributed)0 2128 y(computations)i(with)g Fh(S-lang)g Fk(one)g(can)g(mak)n(e)f(b)r(etter) h(use)g(of)h(a)n(v)-5 b(ailable)27 b(computer)i(resources)e(y)n(et)i (still)h(retain)0 2242 y(the)e(adv)-5 b(an)n(tages)26 b(of)h(programming)e(in)j(an)g(in)n(terpreted)f(language.)0 2401 y(This)g(do)r(cumen)n(t)g(brie\035y)g(describ)r(es)f(ho)n(w)h(to)g (use)g(the)g Fh(S-lang)g Fk(in)n(terface)f(to)h Fj(PVM)p Fk(.)f(It)i(assumes)e(that)h(the)h(reader)0 2514 y(is)f(already)g (familiar)f(with)i(the)g(PVM)h(pac)n(k)-5 b(age)26 b(itself.)0 2673 y(F)-7 b(or)30 b(complete)h(details)g(on)g(obtaining,)g (installing)f(and)h(using)g(the)g(PVM)h(pac)n(k)-5 b(age,)30 b(see)h(the)g Fg(PVM)i(do)l(cumen-)0 2787 y(tation)g Fj(http://www.csm.)o(or)o(nl.)o(go)o(v/)o(pvm)o(/)26 b Fk(.)52 b(Note)32 b(that,)i(once)e(the)h(PVM)h(pac)n(k)-5 b(age)30 b(is)j(prop)r(erly)e(installed)0 2900 y(on)26 b(y)n(our)f(computer,)h(the)h(PVM)g Fj(man)e Fk(pages)h(will)g(pro)n (vide)f(detailed)h(do)r(cumen)n(tation)g(on)g(all)h(the)f(PVM)h (library)0 3014 y(functions.)0 3173 y(Although)33 b(the)g Fh(S-lang)f Fj(PVM)g Fk(mo)r(dule)h(functions)g(often)g(ha)n(v)n(e)e (sligh)n(tly)h(di\033eren)n(t)h(in)n(terfaces,)g(the)g(di\033erences)0 3286 y(are)28 b(usually)g(minor)f(so)h(the)h(PVM)h(do)r(cumen)n(tation) e(is)g(quite)h(helpful.)40 b(Because)28 b(the)h Fh(S-lang)f Fk(in)n(terface)g(is)g(not)0 3400 y(y)n(et)k(fully)g(do)r(cumen)n(ted,) i(it)e(will)h(b)r(e)f(necessary)e(to)i(consult)g(the)h Fj(PVM)e Fk(do)r(cumen)n(tation)g(directly)h(to)g(mak)n(e)f(full)0 3513 y(use)c(of)h(the)g Fh(S-lang)f Fj(PVM)f Fk(mo)r(dule.)0 3672 y(Because)j(PVM)h(pro)r(cesses)e(require)g(running)i(programs)d (on)i(remote)g(hosts,)h(it)g(is)f(necessary)f(to)i(pro)n(vide)e(eac)n (h)0 3786 y(host)34 b(with)g(the)g(full)g(path)g(to)g(the)g(relev)-5 b(an)n(t)33 b(executables.)55 b(T)-7 b(o)33 b(simplify)h(this)g(pro)r (cess,)h(it)f(ma)n(y)f(b)r(e)h(useful)g(to)0 3900 y(create)26 b(a)g(directory)-7 b(,)26 b(e.g.)p Fj($HOME/bin/PVM)p Fk(,)21 b(on)26 b(ev)n(ery)g(host)g(and)h(put)g(relev)-5 b(an)n(t)26 b(executables)g(in)h(that)g(directory)0 4013 y(so)j(that)g(the)h(same)e(relativ)n(e)g(path)h(will)h(w)n(ork)e(on)g (all)h(mac)n(hines.)44 b(This)30 b(PVM)i(path)e(ma)n(y)f(b)r(e)i(sp)r (eci\034ed)f(in)h(the)0 4127 y Fj($HOME/.pvmhosts)d Fk(con\034guration) k(\034le;)38 b(for)33 b(a)h(detailed)g(description)g(of)g(the)g(con)n (ten)n(ts)g(of)g(this)g(\034le,)i(see)e(the)0 4240 y Fj(pvmd)26 b Fk(man)h(page.)0 4399 y(The)g(usage)f(examples)g (discussed)h(in)g(this)h(man)n(ual)e(assume)h(that)g(the)g(PVM)h(has)f (already)f(b)r(een)h(initialized)g(b)n(y)0 4513 y(running)g(a)g (command)g(suc)n(h)h(as)286 4733 y Fe(unix>)40 b(pvm)g(~/.pvmhosts)0 4964 y Fk(This)32 b(starts)f(the)i(PVM)g Fg(c)l(onsole)39 b Fk(and)32 b(also)f(starts)h(the)g(PVM)h(daemon,)g Fj(pvmd)p Fk(,)f(on)g(eac)n(h)f(remote)h(host.)50 b(This)0 5077 y(daemon)27 b(runs)h(all)f(PVM)i(sla)n(v)n(e)d(pro)r(cesses)h(and)g (handles)h(all)f(comm)n(unications)g(with)h(the)h(paren)n(t)e(pro)r (cess)f(and)0 5191 y(the)i(rest)f(of)h(the)g(PVM.)0 5350 y(The)34 b(execution)f(en)n(vironmen)n(t)g(of)g(the)h(PVM)h(sla)n(v)n (e)d(pro)r(cesses)g(is)i(inherited)g(from)f(the)h(corresp)r(onding)e Fj(pvmd)1779 5560 y Fk(5)p eop end %%Page: 6 6 TeXDict begin 6 5 bop 0 -167 3600 5 v 0 -200 a Fk(6)1619 b Fh(Chapter)32 b(1.)73 b(In)m(tro)s(duction)32 b(to)g(the)g(PVM)g(Mo)s (dule)0 104 y Fk(pro)r(cess)18 b(whic)n(h,)j(in)e(turn,)i(is)e (inherited)g(from)g(the)h(paren)n(t)e(pro)r(cess)g(whic)n(h)h(started)f (the)i(PVM)g Fg(c)l(onsole)6 b Fk(.)35 b(Ho)n(w)n(ev)n(er,)0 218 y(it)22 b(is)g(sometimes)f(useful)h(to)g(con\034gure)e(the)i(en)n (vironmen)n(t)f(of)h(the)g(remote)f Fj(pvmd)f Fk(pro)r(cess)g(using)i (a)f(startup)g(script,)0 331 y Fj($HOME/.pvmprofil)o(e)p Fk(.)45 b(This)32 b(is)g(a)g(Bourne)g(shell)g(script)g(whic)n(h,)h(if)g (presen)n(t,)g(is)f(run)g(when)h Fj(pvmd)d Fk(is)j(started.)0 445 y(F)-7 b(or)27 b(a)g(detailed)h(description)f(of)g(the)h(con)n(ten) n(ts)f(of)g(this)h(\034le,)g(see)f(the)h Fj(pvmd)e Fk(man)i(page.)p eop end %%Page: 7 7 TeXDict begin 7 6 bop 0 799 a Ff(Chapter)61 b(2)0 1292 y Fi(Using)73 b(the)f(PVM)g(Mo)6 b(dule)0 1780 y Fk(T)-7 b(o)27 b(use)f(the)i Fj(PVM)d Fk(mo)r(dule)j(in)f(a)f Fh(S-lang)h Fk(script,)g(it)g(is)g(\034rst)g(necessary)e(to)i(mak)n(e)f (the)h(functions)g(in)g(the)h(pac)n(k)-5 b(age)0 1894 y(kno)n(wn)27 b(to)g(the)h(in)n(terpreter)f(via)364 2107 y Fe(\(\))40 b(=)g(evalfile)g(\("pvm"\);)0 2330 y Fk(or,)27 b(if)h(the)g(application)f(em)n(b)r(edding)g(the)h(in)n(terpreter)f (supp)r(orts)g(the)h Fj(require)c Fk(function,)364 2543 y Fe(require)41 b(\("pvm"\);)0 2766 y Fk(ma)n(y)24 b(b)r(e)h(used.)35 b(If)25 b(there)g(is)f(a)g(namespace)f(con\035ict)i(b)r(et)n(w)n(een)f (sym)n(b)r(ols)g(in)h(the)g(script)f(and)g(those)g(de\034ned)h(in)g (the)0 2880 y(mo)r(dule,)j(it)g(ma)n(y)f(b)r(e)h(necessary)d(to)j(load) f(the)h(PVM)g(pac)n(k)-5 b(age)26 b(in)n(to)h(a)h(namespace,)e(e.g.,) 325 3093 y Fe(\(\))40 b(=)f(evalfile)i(\("pvm",)g("p"\);)0 3316 y Fk(will)28 b(place)f(the)h(PVM)g(sym)n(b)r(ols)f(in)n(to)g(a)h (namespace)e(called)h Fj(p)p Fk(.)0 3473 y(Once)f(the)g(PVM)h(mo)r (dule)f(has)f(b)r(een)i(loaded,)e(the)i(functions)f(it)h(de\034nes)e (ma)n(y)h(b)r(e)g(used)g(in)g(the)h(usual)e(w)n(a)n(y)-7 b(,)25 b(e.g.,)364 3686 y Fe(require)41 b(\("pvm"\);)521 3790 y(.)521 3894 y(.)364 3998 y(variable)g(master_tid)h(=)d(pvm_mytid) i(\(\);)0 4221 y Fk(where)27 b Fj(pvm_mytid)d Fk(is)j(the)h(PVM)h (function)f(whic)n(h)f(returns)g(the)h(task)f(iden)n(ti\034er)g(of)h (the)g(calling)f(pro)r(cess.)1779 5560 y(7)p eop end %%Page: 8 8 TeXDict begin 8 7 bop 0 -167 3600 5 v 0 -200 a Fk(8)2023 b Fh(Chapter)32 b(2.)74 b(Using)31 b(the)h(PVM)g(Mo)s(dule)p eop end %%Page: 9 9 TeXDict begin 9 8 bop 0 808 a Ff(Chapter)61 b(3)0 1310 y Fi(Examples)0 1808 y Fk(This)22 b(section)g(presen)n(ts)g(examples)g (of)g(t)n(w)n(o)g(alternate)f(metho)r(ds)i(of)f(using)g(the)h(PVM)g(mo) r(dule.)36 b(The)22 b(source)f(co)r(de)0 1922 y(for)j(these)g(examples) g(is)g(included)h(in)f(the)h Fj(PVM)e Fk(mo)r(dule)i(source)e(co)r(de)h (distribution)g(in)h(the)g Fj(examples)c Fk(sub)r(direc-)0 2035 y(tory)-7 b(.)37 b(The)27 b(\034rst)h(metho)r(d)g(uses)f(PVM)i (library)d(routines)h(to)h(manage)e(a)i(simple)f(distributed)i (application.)36 b(The)0 2149 y(second)24 b(metho)r(d)i(uses)e(the)h (higher-lev)n(el)e(master-sla)n(v)n(e)g(in)n(terface.)35 b(This)25 b(in)n(terface)f(can)g(pro)n(vide)g(a)g(high)h(degree)0 2263 y(of)e(tolerance)e(to)i(failure)g(of)g(sla)n(v)n(e)e(mac)n(hines)h (whic)n(h)h(pro)n(v)n(es)e(useful)i(in)g(long-running)f(distributed)h (applications.)0 2651 y Fd(3.1)130 b(Example)45 b(1:)57 b(A)44 b(Simple)h Fc(Hel)7 b(lo)46 b(W)-10 b(orld)57 b Fd(Program)0 2907 y Fk(In)29 b(programming)d(language)h(tutorials,)g (the)i(\034rst)f(example)g(is)h(usually)f(a)g(program)e(whic)n(h)j (simply)f(prin)n(ts)g(out)0 3020 y(a)h(message)e(suc)n(h)i(as)f Fg(Hel)t(lo)k(W)-6 b(orld)39 b Fk(and)28 b(then)i(exits.)41 b(The)29 b(in)n(ten)n(t)g(of)g(suc)n(h)g(a)g(trivial)f(example)h(is)g (to)g(illustrate)0 3134 y(all)e(the)h(steps)g(in)n(v)n(olv)n(ed)e(in)i (writing)f(and)g(running)g(a)g(program)f(in)i(that)g(language.)0 3300 y(T)-7 b(o)31 b(write)h(a)f Fg(Hel)t(lo)k(W)-6 b(orld)41 b Fk(program)29 b(using)j(the)g(PVM)g(mo)r(dule,)i(w)n(e)d(will)h (write)f(t)n(w)n(o)g(programs,)g(the)h(master)0 3413 y(\(hello_master\),)41 b(and)e(the)h(sla)n(v)n(e)d(\(hello_sla)n(v)n (e\).)70 b(The)40 b(master)e(pro)r(cess)g(will)h(spa)n(wn)g(a)g(sla)n (v)n(e)e(pro)r(cess)h(on)0 3527 y(di\033eren)n(t)28 b(host)f(and)h (then)g(w)n(ait)g(for)f(a)g(message)g(from)g(that)h(sla)n(v)n(e)e(pro)r (cess.)37 b(When)28 b(the)g(sla)n(v)n(e)e(runs,)i(it)g(sends)g(a)0 3640 y(message)g(to)h(the)g(master,)g(or)f(paren)n(t,)h(and)f(then)i (exits.)41 b(F)-7 b(or)29 b(the)g(purp)r(ose)f(of)i(this)f(example,)g (w)n(e)g(will)g(assume)0 3754 y(that)j(the)g(PVM)h(consists)e(of)h(t)n (w)n(o)f(hosts,)h(named)g Fj(vex)e Fk(and)i Fj(pirx)p Fk(,)f(and)h(that)g(the)g(sla)n(v)n(e)e(pro)r(cess)h(will)h(run)f(on)0 3867 y Fj(pirx)p Fk(.)0 4209 y Fb(3.1.1)112 b(The)38 b Fa(hello_master)i Fb(program)0 4436 y Fk(First,)27 b(consider)g(the)h(master)f(pro)r(cess,)f(hello_master.)35 b(Conceptually)-7 b(,)27 b(it)h(m)n(ust)g(sp)r(ecify)g(the)f(full)i (path)e(to)h(the)0 4550 y(sla)n(v)n(e)34 b(executable)i(and)f(then)i (send)f(that)g(information)f(to)h(the)g(sla)n(v)n(e)e(host)i(\()p Fj(pirx)p Fk(\).)61 b(F)-7 b(or)35 b(this)h(example,)h(w)n(e)0 4663 y(assume)24 b(that)h(the)g(master)f(and)h(sla)n(v)n(e)e (executables)h(are)g(in)h(the)h(same)e(directory)f(and)i(that)g(the)g (master)f(pro)r(cess)0 4777 y(is)f(started)g(in)h(that)g(directory)-7 b(.)34 b(With)25 b(this)f(assumption,)f(w)n(e)h(can)f(construct)g(the)h (path)f(to)h(the)g(sla)n(v)n(e)e(executable)0 4890 y(using)h(the)h Fj(getcwd)d Fk(and)j Fj(path_concat)19 b Fk(functions.)36 b(W)-7 b(e)24 b(then)g(send)g(this)g(information)e(to)i(the)g(sla)n(v)n (e)e(host)h(using)0 5004 y(the)28 b Fj(pvm_spawn)c Fk(function:)325 5246 y Fe(path)40 b(=)g(path_concat)h(\(getcwd\(\),)h("hello_slave"\);) 325 5350 y(slave_tid)f(=)f(pvm_spawn)h(\(path,)g(PvmTaskHost,)g ("pirx",)g(1\);)1779 5560 y Fk(9)p eop end %%Page: 10 10 TeXDict begin 10 9 bop 0 -167 3600 5 v 0 -200 a Fk(10)2594 b Fh(Chapter)33 b(3.)73 b(Examples)0 104 y Fk(The)20 b(\034rst)g(argumen)n(t)f(to)h Fj(pvm_spawn)d Fk(sp)r(eci\034es)j(the)g (full)h(path)f(to)g(the)h(sla)n(v)n(e)e(executable.)34 b(The)20 b(second)f(argumen)n(t)0 218 y(is)h(a)h(bit)g(mask)f(sp)r (ecifying)g(options)g(asso)r(ciated)f(with)i(spa)n(wning)f(the)h(sla)n (v)n(e)e(pro)r(cess.)33 b(The)20 b Fj(PvmTaskHost)c Fk(option)0 331 y(indicates)33 b(that)g(the)h(sla)n(v)n(e)e(pro)r(cess)g(is)h(to)g (b)r(e)g(started)g(on)g(a)f(sp)r(eci\034c)i(host.)53 b(The)33 b(third)h(argumen)n(t)e(giv)n(es)g(the)0 445 y(name)e(of)g(the)g(sla)n(v)n(e)f(host)h(and)g(the)g(last)g(argumen)n (t)f(indicates)g(ho)n(w)h(man)n(y)f(copies)h(of)g(this)g(pro)r(cess)f (should)h(b)r(e)0 558 y(started.)35 b(The)25 b(return)g(v)-5 b(alue)24 b(of)h Fj(pvm_spawn)c Fk(is)k(an)g(arra)n(y)d(of)j(task)f (iden)n(ti\034ers)h(for)f(eac)n(h)g(of)h(the)g(sla)n(v)n(e)f(pro)r (cesses;)0 672 y(negativ)n(e)i(v)-5 b(alues)28 b(indicate)f(that)h(an)f (error)f(o)r(ccurred.)0 829 y(Ha)n(ving)e(spa)n(wned)g(the)i(hello_sla) n(v)n(e)c(pro)r(cess)i(on)h Fj(pirx)p Fk(,)f(the)h(master)f(pro)r(cess) g(calls)h(the)g Fj(pvm_recv)d Fk(function)j(to)0 942 y(receiv)n(e)h(a)h(message)g(from)g(the)h(sla)n(v)n(e.)325 1156 y Fe(bufid)41 b(=)e(pvm_recv)i(\(-1,)f(-1\);)0 1379 y Fk(The)33 b(\034rst)g(argumen)n(t)f(to)g Fj(pvm_recv)e Fk(sp)r(eci\034es)j(the)g(task)g(iden)n(ti\034er)g(of)f(the)i(sla)n(v)n (e)d(pro)r(cess)h(exp)r(ected)h(to)g(send)0 1492 y(the)e(message)d(and) i(the)h(second)e(argumen)n(t)g(sp)r(eci\034es)h(the)h(t)n(yp)r(e)f(of)g (message)f(that)i(is)f(exp)r(ected.)45 b(A)30 b(sla)n(v)n(e)f(task)0 1606 y(iden)n(ti\034er)h Fj(-1)f Fk(means)g(that)h(a)g(message)e(from)h (an)n(y)h(sla)n(v)n(e)e(will)i(b)r(e)g(accepted.)44 b(Similarly)-7 b(,)29 b(a)h(message)e(iden)n(ti\034er)0 1719 y(of)d Fj(-1)f Fk(means)h(that)g(an)n(y)g(t)n(yp)r(e)g(of)g(message)f(will)h (b)r(e)g(accepted.)36 b(In)25 b(this)h(example,)f(w)n(e)g(could)g(ha)n (v)n(e)e(sp)r(eci\034ed)j(the)0 1833 y(sla)n(v)n(e)g(task)h(id)h(and)f (the)h(message)e(iden)n(ti\034er)i(explicitly:)286 2046 y Fe(bufid)40 b(=)g(pvm_recv)h(\(slave_tid,)g(1\);)0 2269 y Fk(When)32 b(a)e(suitable)h(message)f(is)h(receiv)n(ed,)f(the)i (con)n(ten)n(ts)e(of)h(the)g(message)f(are)g(stored)g(in)i(a)e(PVM)i (bu\033er)f(and)0 2383 y Fj(pvm_recv)d Fk(returns)j(the)h(bu\033er)g (iden)n(ti\034er)g(whic)n(h)f(ma)n(y)g(b)r(e)h(used)g(b)n(y)f(the)h (PVM)h(application)e(to)g(retriev)n(e)g(the)0 2497 y(con)n(ten)n(ts)c (of)g(the)h(bu\033er.)0 2653 y(Retrieving)23 b(the)i(con)n(ten)n(ts)e (of)h(the)g(bu\033er)g(normally)f(requires)f(kno)n(wing)h(the)h(format) g(in)g(whic)n(h)g(the)g(information)0 2767 y(is)32 b(stored.)48 b(In)32 b(this)g(case,)g(b)r(ecause)f(w)n(e)h(accepted)f(all)h(t)n(yp)r (es)f(of)h(messages)e(from)h(the)i(sla)n(v)n(e,)e(w)n(e)g(ma)n(y)g (need)h(to)0 2880 y(examine)18 b(the)i(message)d(bu\033er)i(to)g (\034nd)g(out)g(what)g(kind)g(of)g(message)f(w)n(as)g(actually)g (reciev)n(ed.)33 b(The)19 b Fj(pvm_bufinfo)0 2994 y Fk(function)28 b(is)g(used)f(to)h(obtain)f(information)g(ab)r(out)g(the)h(con)n(ten)n (ts)f(of)g(the)h(bu\033er.)325 3207 y Fe(\(,msgid,\))41 b(=)f(pvm_bufinfo)h(\(bufid\);)0 3430 y Fk(Giv)n(en)23 b(the)h(bu\033er)g(iden)n(ti\034er,)h Fj(pvm_bufinfo)19 b Fk(returns)k(the)h(n)n(um)n(b)r(er)f(of)g(b)n(ytes,)i(the)f(message)e (iden)n(ti\034er)h(and)h(the)0 3544 y(task)j(iden)n(tifer)h(sending)f (the)h(message.)0 3700 y(Because)22 b(w)n(e)h(kno)n(w)f(that)h(the)h (sla)n(v)n(e)d(pro)r(cess)h(sen)n(t)h(a)g(single)g(ob)5 b(ject)22 b(of)i Fj(Struct_Type)p Fk(,)19 b(w)n(e)k(retriev)n(e)e(it)j (b)n(y)f(calling)0 3814 y(the)28 b Fj(pvm_recv_obj)23 b Fk(function.)325 4028 y Fe(variable)41 b(obj)f(=)f(pvm_recv_obj\(\);) 325 4132 y(vmessage)i(\("\045s)f(says)g(\045s",)g(obj.from,)i (obj.msg\);)0 4355 y Fk(This)33 b(function)h(is)f(not)g(part)g(of)g (the)h(PVM)g(pac)n(k)-5 b(age)32 b(but)i(is)f(a)g(higher)f(lev)n(el)h (function)h(pro)n(vided)e(b)n(y)h(the)g Fj(PVM)0 4468 y Fk(mo)r(dule.)41 b(It)29 b(simpli\034es)f(the)h(pro)r(cess)f(of)h (sending)f Fh(S-lang)g Fk(ob)5 b(jects)28 b(b)r(et)n(w)n(een)h(hosts)f (b)n(y)h(handling)f(some)g(of)h(the)0 4582 y(b)r(o)r(okk)n(eeping)d (required)g(b)n(y)h(the)g(lo)n(w)n(er)e(lev)n(el)i(PVM)h(in)n(terface.) 36 b(Ha)n(ving)26 b(retriev)n(ed)g(a)h Fh(S-lang)f Fk(ob)5 b(ject)27 b(from)g(the)0 4695 y(message)f(bu\033er,)i(w)n(e)f(can)g (then)h(prin)n(t)g(out)f(the)h(message.)36 b(Running)27 b(hello_master,)f(w)n(e)i(see:)286 4909 y Fe(vex>)40 b(./hello_master)286 5013 y(pirx)g(says)g(Hello)g(World)0 5236 y Fk(Note)30 b(that)g(b)r(efore)f(exiting,)h(all)f(PVM)i(pro)r (cesses)d(should)i(call)f(the)h Fj(pvm_exit)c Fk(function)31 b(to)e(inform)h(the)g Fj(pvmd)0 5350 y Fk(daemon)d(of)g(the)h(c)n (hange)f(in)h(PVM)g(status.)p eop end %%Page: 11 11 TeXDict begin 11 10 bop 0 -167 3600 5 v 0 -200 a Fh(3.2.)73 b(Example)30 b(2:)42 b(Using)31 b(the)g(Master-Sla)m(v)m(e)i(In)m (terface)1407 b Fk(11)325 104 y Fe(pvm_exit\(\);)325 208 y(exit\(0\);)0 430 y Fk(A)n(t)28 b(this)g(p)r(oin)n(t,)g(the)f (script)h(ma)n(y)f(exit)g(normally)-7 b(.)0 721 y Fb(3.1.2)112 b(The)38 b Fa(hello_slave)i Fb(program)0 931 y Fk(No)n(w,)31 b(consider)e(the)i(sla)n(v)n(e)e(pro)r(cess,)h(hello_sla)n(v)n(e.)43 b(Conceptually)-7 b(,)31 b(it)f(m)n(ust)h(\034rst)f(determine)h(the)f (lo)r(cation)g(of)0 1045 y(its)e(paren)n(t)f(pro)r(cess,)f(then)i (create)f(and)g(send)h(a)f(message)f(to)h(that)h(pro)r(cess.)0 1201 y(The)g(task)f(iden)n(ti\034er)g(of)h(the)f(paren)n(t)g(pro)r (cess)g(is)g(obtained)g(using)g(the)h Fj(pvm_parent)c Fk(function.)325 1414 y Fe(variable)41 b(ptid)f(=)g(pvm_parent\(\);)0 1636 y Fk(F)-7 b(or)38 b(this)i(example,)h(w)n(e)e(will)g(send)g(a)g (message)e(consisting)h(of)h(a)g Fh(S-lang)f Fk(structure)h(with)g(t)n (w)n(o)g(\034elds,)i(one)0 1749 y(con)n(taining)26 b(the)i(name)g(of)f (the)h(sla)n(v)n(e)e(host)i(and)f(the)h(other)f(con)n(taining)f(the)i (string)f Fj("Hello)41 b(World")p Fk(.)0 1906 y(W)-7 b(e)41 b(use)g(the)h Fj(pvm_send_obj)36 b Fk(function)41 b(to)g(send)g(this)h(this)f(message)f(b)r(ecause)g(it)i(automatically)d (handles)0 2019 y(pac)n(k)-5 b(aging)36 b(all)i(the)h(separate)d (structure)i(\034elds)g(in)n(to)g(a)g(PVM)h(message)e(bu\033er)h(and)g (also)f(sends)h(along)f(the)0 2133 y(structure)24 b(\034eld)h(names)e (and)i(data)f(t)n(yp)r(es)g(so)g(that)g(the)h(structure)f(can)g(b)r(e)h (automatically)e(re-assem)n(bled)g(b)n(y)h(the)0 2246 y(receiving)31 b(pro)r(cess.)51 b(This)33 b(mak)n(es)e(it)i(p)r (ossible)f(to)h(write)f(co)r(de)h(whic)n(h)f(transparen)n(tly)f(sends)h Fh(S-lang)h Fk(ob)5 b(jects)0 2360 y(from)27 b(one)g(host)h(to)f (another.)36 b(T)-7 b(o)27 b(create)g(and)g(send)h(the)g(structure:)325 2572 y Fe(variable)41 b(s)f(=)f(struct)i({msg,)f(from};)325 2676 y(s.msg)h(=)e("Hello)h(World";)325 2781 y(s.from)h(=)e(getenv)i (\("HOST"\);)325 2989 y(pvm_send_obj)h(\(ptid,)f(1,)e(s\);)0 3211 y Fk(The)g(\034rst)f(argumen)n(t)g(to)h Fj(pvm_send_obj)34 b Fk(sp)r(eci\034es)k(the)i(task)e(iden)n(ti\034er)h(of)f(the)i (destination)e(pro)r(cess,)j(the)0 3324 y(second)33 b(argumen)n(t)f(is) h(a)g(message)e(iden)n(ti\034er)j(whic)n(h)f(is)g(used)g(to)g(indicate) g(what)h(kind)f(of)g(message)f(has)h(b)r(een)0 3438 y(sen)n(t.)k(The)27 b(remaining)g(argumen)n(ts)f(con)n(tain)h(the)h(data)f(ob)5 b(jects)27 b(to)g(b)r(e)h(included)g(in)g(the)g(message.)0 3594 y(Ha)n(ving)j(sen)n(t)h(a)f(message)g(to)h(the)g(paren)n(t)f(pro)r (cess,)h(the)g(sla)n(v)n(e)f(pro)r(cess)g(then)h(calls)f Fj(pvm_exit)e Fk(to)j(inform)g(the)0 3708 y Fj(pvmd)27 b Fk(daemon)i(that)g(its)h(w)n(ork)d(is)i(complete.)41 b(This)30 b(allo)n(ws)d Fj(pvmd)h Fk(to)h(notify)g(the)g(paren)n(t)g (pro)r(cess)f(that)h(a)g(sla)n(v)n(e)0 3821 y(pro)r(cess)d(has)h (exited.)37 b(The)28 b(sla)n(v)n(e)e(then)i(exits)g(normally)-7 b(.)0 4159 y Fd(3.2)130 b(Example)45 b(2:)57 b(Using)44 b(the)g(Master-Sla)l(v)l(e)g(In)l(terface)0 4398 y Fk(The)19 b Fj(PVM)f Fk(mo)r(dule)i(pro)n(vides)d(a)i(higher)f(lev)n(el)h(in)n (terface)g(to)g(supp)r(ort)f(the)i(master-sla)n(v)n(e)c(paradigm)i(for) h(distributed)0 4512 y(computations.)34 b(The)21 b(sym)n(b)r(ols)f (asso)r(ciated)f(with)j(this)f(in)n(terface)f(ha)n(v)n(e)g(the)h Fj(pvm_ms)e Fk(pre\034x)h(to)h(distinguish)g(them)0 4625 y(from)27 b(those)g(sym)n(b)r(ols)g(asso)r(ciated)f(with)i(the)g(PVM)h (pac)n(k)-5 b(age)26 b(itself.)0 4782 y(The)f Fj(pvm_ms)e Fk(in)n(terface)i(pro)n(vides)f(a)h(means)g(for)f(handling)h (computations)g(whic)n(h)g(consist)g(of)h(a)e(predetermined)0 4895 y(list)j(of)g(tasks)g(whic)n(h)g(can)f(b)r(e)i(p)r(erformed)f(b)n (y)f(running)h(arbitrary)e(sla)n(v)n(e)h(pro)r(cesses)f(whic)n(h)i(tak) n(e)g(command-line)0 5009 y(argumen)n(ts.)40 b(The)29 b(in)n(terface)f(pro)n(vides)f(a)i(high)g(degree)f(of)h(robustness,)f (allo)n(wing)f(one)i(to)g(add)f(or)g(delete)i(hosts)0 5122 y(from)f(the)h(PVM)g(while)f(the)h(distributed)g(pro)r(cess)e(is)h (running)g(and)g(also)f(ensuring)h(that)g(the)h(task)f(list)g(will)h(b) r(e)0 5236 y(completed)e(ev)n(en)g(if)g(one)g(or)f(more)h(sla)n(v)n(e)e (hosts)i(fail)g(\(e.g.)38 b(crash\))27 b(during)h(the)g(computation.)38 b(Exp)r(erience)29 b(has)0 5350 y(sho)n(wn)e(that)h(this)h(failure)e (tolerance)g(is)g(surprisingly)g(imp)r(ortan)n(t.)37 b(Long-running)26 b(distributed)j(computations)p eop end %%Page: 12 12 TeXDict begin 12 11 bop 0 -167 3600 5 v 0 -200 a Fk(12)2594 b Fh(Chapter)33 b(3.)73 b(Examples)0 104 y Fk(exp)r(erience)23 b(failure)g(of)g(one)g(or)g(more)f(hosts)h(with)h(surprising)e (frequency)g(and)i(it)f(is)h(essen)n(tial)e(that)i(suc)n(h)f(failures)0 218 y(do)k(not)h(require)e(restarting)g(the)i(en)n(tire)f(distributed)h (computation)f(from)h(the)g(b)r(eginning.)0 374 y(Scripts)f(using)h (this)f(in)n(terface)g(m)n(ust)h(initialize)g(it)g(b)n(y)f(loading)f (the)i Fj(pvm_ms)d Fk(pac)n(k)-5 b(age)26 b(via,)h(e.g.)443 588 y Fe(require)41 b(\("pvm_ms"\);)0 810 y Fk(As)28 b(an)f(example)g(of)h(ho)n(w)e(to)i(use)f(this)h(in)n(terface,)f(w)n(e) g(examine)g(the)h(scripts)f(master)g(and)g(sla)n(v)n(e.)0 1102 y Fb(3.2.1)112 b(The)38 b Fa(master)h Fb(program)0 1312 y Fk(The)27 b(master)f(script)h(\034rst)f(builds)h(a)g(list)g(of)g (tasks)f(eac)n(h)g(consisting)g(of)h(an)f(arra)n(y)f(of)h(strings)g (whic)n(h)h(pro)n(vide)f(the)0 1426 y(command)32 b(line)h(for)f(eac)n (h)g(sla)n(v)n(e)g(pro)r(cess)f(that)i(will)g(b)r(e)g(spa)n(wned)f(on)h (the)g(PVM.)h(F)-7 b(or)32 b(this)h(simple)g(example,)0 1539 y(the)f(same)g(command)f(line)i(will)f(b)r(e)g(executed)g(a)g(sp)r (eci\034ed)g(n)n(um)n(b)r(er)g(of)g(times.)50 b(First,)33 b(the)f(script)g(constructs)0 1653 y(the)g(path)g(to)f(the)i(sla)n(v)n (e)d(executable,)i(\()p Fj(Slave_Pgm)p Fk(\),)e(and)h(then)h(the)g (command)g(line)g(\()p Fj(Cmd)p Fk(\),)g(that)g(eac)n(h)f(sla)n(v)n(e)0 1766 y(instance)c(will)h(in)n(v)n(ok)n(e.)35 b(Then)28 b(the)g(arra)n(y)d(of)j(tasks)e(is)i(constructed:)247 1996 y Fe(variable)41 b(pgm_argvs)g(=)e(Array_Type[N];)247 2101 y(variable)i(pgm_argv)g(=)e([Slave_Pgm,)j(Cmd];)247 2309 y(pgm_argvs[*])g(=)d(pgm_argv;)0 2548 y Fk(The)32 b(distribution)h(of)f(these)g(tasks)g(across)e(the)j(a)n(v)-5 b(ailable)31 b(PVM)i(is)f(automatically)f(handled)i(b)n(y)f(the)h Fj(pvm_ms)0 2662 y Fk(in)n(terface.)48 b(The)31 b(in)n(terface)g(will)h (sim)n(ultaneously)e(start)h(as)g(man)n(y)g(tasks)f(as)h(p)r(ossible)g (up)h(to)f(some)g(maxim)n(um)0 2775 y(n)n(um)n(b)r(er)d(of)g(pro)r (cesses)f(p)r(er)i(host.)39 b(Here)28 b(w)n(e)g(sp)r(ecify)g(that)h(a)f (maxim)n(um)g(of)h(t)n(w)n(o)e(pro)r(cesses)g(p)r(er)h(host)h(ma)n(y)e (run)0 2889 y(sim)n(ultaneously)f(and)i(then)g(submit)g(the)g(list)g (of)f(tasks)g(to)h(the)f(PVM:)325 3119 y Fe (pvm_ms_set_num_processes_per_)q(host)46 b(\(2\);)325 3223 y(exit_status)c(=)d(pvm_ms_run_master)k(\(pgm_argvs\);)0 3463 y Fk(As)32 b(eac)n(h)f(sla)n(v)n(e)f(pro)r(cess)h(is)h(completed,) h(its)f(exit)g(status)g(is)g(recorded)e(along)h(with)h(an)n(y)f (messages)f(prin)n(ted)i(to)0 3576 y Fj(stdout)f Fk(during)i(the)h (execution.)55 b(When)34 b(the)g(en)n(tire)f(list)h(of)g(tasks)f(is)g (complete,)i(an)f(arra)n(y)d(of)i(structures)g(is)0 3690 y(returned)24 b(con)n(taining)f(status)h(information)f(for)h(eac)n(h)f (task)h(that)g(w)n(as)f(executed.)36 b(In)24 b(this)h(example,)f(the)h (master)0 3803 y(pro)r(cess)h(simply)i(prin)n(ts)f(out)h(this)g (information.)0 4095 y Fb(3.2.2)112 b(The)38 b Fa(slave)h Fb(program)0 4305 y Fk(The)25 b(sla)n(v)n(e)f(pro)r(cess)g(in)i(this)g (example)e(is)i(relativ)n(ely)e(simple.)36 b(Its)25 b(command)g(line)h (argumen)n(ts)e(pro)n(vide)g(the)i(task)0 4419 y(to)h(b)r(e)h (completed.)37 b(These)28 b(argumen)n(ts)e(are)g(then)i(passed)f(to)h Fj(pvm_ms_run_slav)o(e)286 4632 y Fe(pvm_ms_run_slave)43 b(\(__argv[[1:]]\);)0 4855 y Fk(whic)n(h)28 b(spa)n(wns)f(a)g (subshell,)h(runs)g(the)g(sp)r(eci\034ed)g(command,)g(comm)n(unicates)f (the)h(task)g(completion)g(status)f(to)0 4968 y(the)h(paren)n(t)f(pro)r (cess)f(and)h(exits.)p eop end %%Page: 13 13 TeXDict begin 13 12 bop 0 804 a Ff(Chapter)61 b(4)0 1303 y Fi(Master-Sla)-6 b(v)g(e)72 b(F)-18 b(unction)73 b(Reference)0 1854 y Fd(4.1)130 b(p)l(vm_ms_kill)32 2099 y Fh(Synopsis)208 2258 y Fk(Send)27 b(a)h("task)e(complete")h(message)f(to)i(a)f(sp)r (eci\034c)g(task)32 2460 y Fh(Usage)208 2619 y Fj(pvm_ms_kill)38 b(\(Int_Type)i(mtid,)i(Int_Type)e(stid\))32 2821 y Fh(Description)208 2980 y Fk(This)24 b(function)i(ma)n(y)e(b)r(e)h(used)g(to)g(send)g(a)f ("task)g(complete")g(message)f(to)i(a)g(sp)r(eci\034c)g(PVM)g(pro)r (cess.)35 b(The)208 3093 y(\034rst)27 b(argumen)n(t)g(giv)n(es)f(the)i (task)g(iden)n(ti\034er)f(of)h(the)g(destination)g(pro)r(cess.)36 b(The)28 b(second)f(argumen)n(t)f(giv)n(es)208 3207 y(the)i(task)e (iden)n(ti\034er)i(of)f(the)h(sending)g(pro)r(cess.)32 3409 y Fh(Example)469 3625 y Fe(tid)40 b(=)f(pvm_mytid)i(\(\);)469 3729 y(ptid)f(=)f(pvm_parent)j(\(\);)469 3833 y(pvm_ms_kill)f(\(ptid,)g (tid\);)32 4058 y Fh(See)31 b(Also)208 4217 y Fj(4.4)42 b(\(pvm_ms_slave_e)o(xit)o(\))0 4585 y Fd(4.2)130 b(p)l(vm_ms_set_n)l (um_pro)t(cesses_p)t(er_host)32 4830 y Fh(Synopsis)208 4989 y Fk(Set)28 b(the)f(maxim)n(um)h(n)n(um)n(b)r(er)f(of)h(sim)n (ultaneous)e(pro)r(cesses)g(p)r(er)i(host)32 5191 y Fh(Usage)208 5350 y Fj(pvm_ms_set_num_)o(pr)o(oc)o(ess)o(es)o(_pe)o(r_)o(ho)o(st)37 b(\(Int_Type)j(num_processes\))1758 5560 y Fk(13)p eop end %%Page: 14 14 TeXDict begin 14 13 bop 0 -167 3600 5 v 0 -200 a Fk(14)1614 b Fh(Chapter)32 b(4.)73 b(Master-Sla)m(v)m(e)33 b(F)-8 b(unction)31 b(Reference)32 104 y(Description)208 243 y Fk(This)i(function)g(is)h(used)f(to)g(set)g(the)h(maxim)n(um)f(n)n (um)n(b)r(er)f(of)i(sim)n(ultaneous)e(pro)r(cesses)f(p)r(er)j(host.)53 b(The)208 357 y(master)40 b(pro)r(cess)g(normally)h(runs)g(as)f(man)n (y)h(sim)n(ultaneous)g(pro)r(cesses)e(as)i(p)r(ossible;)48 b(b)n(y)41 b(setting)h(the)208 470 y(maxim)n(um)31 b(n)n(um)n(b)r(er)h (of)g(sim)n(ultaneous)g(pro)r(cesses)e(p)r(er)i(host,)h(one)f(can)g (limit)h(the)f(pro)r(cessing)f(load)g(p)r(er)208 584 y(host.)32 748 y Fh(Example)469 912 y Fe (pvm_ms_set_num_processes_per_hos)q(t)45 b(\(2\);)32 1086 y Fh(See)31 b(Also)208 1225 y Fj(4.6)42 b(\(pvm_ms_run_mas)o(ter)o (\))0 1556 y Fd(4.3)130 b(p)l(vm_ms_set_debug)32 1778 y Fh(Synopsis)208 1917 y Fk(Set)28 b(the)f(debug)h(\035ag)32 2081 y Fh(Usage)208 2220 y Fj(pvm_ms_set_debu)o(g)37 b(\(Int_Type)j(debug\))32 2385 y Fh(Description)208 2524 y Fk(This)34 b(function)i(ma)n(y)e(b)r(e)h(used)g(to)g(con)n(trol)e (whether)i(debugging)f(information)g(is)h(prin)n(ted)g(out)g(during)208 2637 y(execution.)h(Debugging)27 b(information)g(is)g(prin)n(ted)h(if)g (the)g(\035ag)e(is)i(non-zero.)32 2802 y Fh(Example)469 2966 y Fe(pvm_ms_set_debug)42 b(\(1\);)32 3139 y Fh(See)31 b(Also)208 3278 y Fj(4.2)42 b(\(pvm_ms_set_num)o(_pr)o(oc)o(ess)o(es)o (_p)o(er_)o(ho)o(st)o(\))0 3610 y Fd(4.4)130 b(p)l(vm_ms_sla)l(v)l (e_exit)32 3831 y Fh(Synopsis)208 3970 y Fk(Cause)26 b(a)i(normal)e(exit)i(of)f(a)g(sla)n(v)n(e)g(pro)r(cess)f(from)h(the)h (PVM)32 4134 y Fh(Usage)208 4273 y Fj(pvm_ms_slave_ex)o(it)37 b(\(Int_Type)j(exit_status\))32 4438 y Fh(Description)208 4577 y Fk(T)-7 b(o)21 b(exit)i(the)f(PVM,)i(a)d(sla)n(v)n(e)g(pro)r (cess)g(calls)h(this)g(function)h(to)f(send)g(its)h(exit)f(status)g(to) g(the)h(paren)n(t)e(pro)r(cess)208 4690 y(and)27 b(to)g(notify)h(the)g (lo)r(cal)f Fj(pvmd)f Fk(of)i(its)f(exit.)32 4855 y Fh(Example)547 5019 y Fe(pvm_ms_slave_exit)43 b(\(exit_status\);)32 5192 y Fh(See)31 b(Also)208 5331 y Fj(4.5)42 b(\(pvm_ms_run_sla)o(ve\)) p eop end %%Page: 15 15 TeXDict begin 15 14 bop 0 -167 3600 5 v 0 -200 a Fh(4.5.)73 b(p)m(vm_ms_run_sla)m(v)m(e)2428 b Fk(15)0 104 y Fd(4.5)130 b(p)l(vm_ms_run_sla)l(v)l(e)32 349 y Fh(Synopsis)208 508 y Fk(Execute)28 b(the)g(sla)n(v)n(e's)d(assigned)i(task)g(in)h(a)f (subshell,)g(then)h(exit)g(the)g(PVM)32 711 y Fh(Usage)208 869 y Fj(pvm_ms_run_slav)o(e)37 b(\(String_Type)i(argv[]\))32 1072 y Fh(Description)208 1230 y Fk(A)32 b(sla)n(v)n(e)f(pro)r(cess)h (calls)f(this)i(function)g(to)g(run)f(a)g(command)g(in)h(a)f(subshell)g (and)h(then)g(exit)f(the)h(PVM.)208 1343 y(The)e(command)h(line)g(is)g (constructed)f(b)n(y)g(concaten)n(ting)g(the)h(elemen)n(ts)g(of)g(an)f (arra)n(y)f(of)i(strings,)g Fj(argv)p Fk(,)208 1457 y(delimited)25 b(b)n(y)e(spaces.)35 b(The)25 b(in)n(teger)e(return)h(v)-5 b(alue)24 b(from)g(the)g Fj(system)e Fk(call)i(pro)n(vides)f(the)h (exit)h(status)f(for)208 1571 y(the)32 b(sla)n(v)n(e)e(pro)r(cess.)49 b(After)32 b(sending)g(this)g(v)-5 b(alue)32 b(to)f(its)i(paren)n(t)e (pro)r(cess,)h(the)g(sla)n(v)n(e)e(noti\034es)i(the)g(PVM)208 1684 y(and)27 b(exits.)32 1887 y Fh(Example)508 2103 y Fe(pvm_ms_run_slave)43 b(\(argv\);)32 2328 y Fh(See)31 b(Also)208 2486 y Fj(4.4)42 b(\(pvm_ms_slave_e)o(xit)o(\))0 2855 y Fd(4.6)130 b(p)l(vm_ms_run_master)32 3100 y Fh(Synopsis)208 3258 y Fk(Submit)28 b(a)f(list)h(of)g(tasks)e(to)i(the)g(PVM)32 3461 y Fh(Usage)208 3619 y Fj(Struct_Type)38 b(exit_status[])h(=)k (pvm_ms_run_mast)o(er)37 b(\(String_Type)i(pgms[]\))32 3822 y Fh(Description)208 3980 y Fk(This)23 b(function)g(is)g(used)g (to)g(submit)h(a)f(managed)e(list)j(of)f(tasks)f(to)h(the)h(PVM.)g(The) f(task)f(list)i(manager)d(will)208 4094 y(try)j(to)i(ensure)e(that)i (all)e(tasks)h(are)f(completed)h(and,)h(up)r(on)f(completion)g(of)g (the)h(task)e(list,)i(will)g(return)e(an)208 4207 y(arra)n(y)h(of)i (structures)g(con)n(taining)f(information)h(ab)r(out)h(the)g(results)f (of)g(eac)n(h)g(task.)32 4410 y Fh(Example)208 4569 y Fk(T)-7 b(o)27 b(run)g(the)h(Unix)g(command)f Fg(ps)j(xu)j Fk(on)28 b(a)f(n)n(um)n(b)r(er)g(of)g(di\033eren)n(t)h(hosts:)547 4762 y Fe(variable)41 b(slave_argv)g(=)f(Array_Type[n];)547 4866 y(slave_argv[*])i(=)e(["ps",)g("axu"];)547 4970 y(exit_status)i(=)d(pvm_ms_run_master)k(\(slave_argv\);)32 5173 y Fh(See)31 b(Also)208 5331 y Fj(4.7)42 b(\(pvm_ms_add_new)o(_sl)o (av)o(e\))p eop end %%Page: 16 16 TeXDict begin 16 15 bop 0 -167 3600 5 v 0 -200 a Fk(16)1614 b Fh(Chapter)32 b(4.)73 b(Master-Sla)m(v)m(e)33 b(F)-8 b(unction)31 b(Reference)0 104 y Fd(4.7)130 b(p)l(vm_ms_add_new_sla)l (v)l(e)32 333 y Fh(Synopsis)208 479 y Fk(A)n(dd)27 b(a)h(new)f(sla)n(v) n(e)f(to)i(the)g(managed)e(list)32 658 y Fh(Usage)208 804 y Fj(pvm_ms_add_new_)o(sl)o(av)o(e)38 b(\(String_Type)g(argv[]\))32 983 y Fh(Description)208 1129 y Fk(This)19 b(function)g(ma)n(y)g(b)r(e) h(used)f(to)g(add)g(a)g(new)g(sla)n(v)n(e)f(pro)r(cess)g(while)h(p)n (vm_ms_run_master\(\))e(is)i(running,)208 1242 y(usually)27 b(as)g(a)g(result)g(of)g(handling)h(a)f(message.)32 1421 y Fh(Example)547 1607 y Fe(pvm_ms_add_new_slave)44 b(\("vex"\);)32 1801 y Fh(See)31 b(Also)208 1948 y Fj(4.6)42 b(\(pvm_ms_run_mas)o(ter)o (\))0 2286 y Fd(4.8)130 b(p)l(vm_ms_set_message_callbac)l(k)32 2514 y Fh(Synopsis)208 2660 y Fk(Set)28 b(a)f(callbac)n(k)f(for)h (handling)g(user-de\034ned)g(messages)32 2839 y Fh(Usage)208 2985 y Fj(pvm_ms_set_mess)o(ag)o(e_)o(cal)o(lb)o(ack)37 b(\(Ref_Type)i(func\))32 3164 y Fh(Description)208 3310 y Fk(This)27 b(function)i(ma)n(y)e(b)r(e)h(used)g(to)g(handle)g (user-de\034ned)f(messages)f(b)r(e)i(sen)n(t)g(from)f(sla)n(v)n(e)g (pro)r(cesses)f(bac)n(k)208 3424 y(to)h(the)h(master)f(pro)r(cess.)32 3603 y Fh(Example)429 3892 y Fe(static)41 b(define)f (handle_user_message)k(\(msgid,)d(tid\))429 3996 y({)547 4100 y(switch)g(\(msgid\))626 4204 y({)665 4309 y(case)f (USER_SLAVE_RESULT:)822 4413 y(recv_results)h(\(tid\);)822 4517 y(start_task)g(\(tid\);)626 4621 y(})626 4725 y({)665 4829 y(case)f(USER_SLAVE_READY:)822 4933 y(start_task)h(\(tid\);)626 5037 y(})626 5141 y({)743 5246 y(\045)f(default:)822 5350 y(return)g(0;)p eop end %%Page: 17 17 TeXDict begin 17 16 bop 0 -167 3600 5 v 0 -200 a Fh(4.9.)73 b(p)m(vm_ms_set_sla)m(v)m(e_exit_failed_callbac)m(k)1518 b Fk(17)626 104 y Fe(})547 208 y(return)41 b(1;)429 312 y(})429 521 y(pvm_ms_set_message_callback)46 b (\(&handle_user_message\);)32 712 y Fh(See)31 b(Also)208 858 y Fj(4.11)41 b(\(pvm_ms_set_idle_)o(ho)o(st_)o(ca)o(ll)o(bac)o(k\)) o(,)c(4.9)43 b(\(pvm_ms_set_sla)o(ve_)o(ex)o(it)o(_fa)o(il)o(ed)o(_ca)o (ll)o(ba)o(ck\))0 1195 y Fd(4.9)130 b(p)l(vm_ms_set_sla)l(v)l (e_exit_failed_callbac)l(k)32 1422 y Fh(Synopsis)208 1567 y Fk(Set)28 b(a)f(ho)r(ok)g(to)g(b)r(e)h(called)f(when)h(a)f(sla)n (v)n(e)f(exits)i(on)f(failure)32 1744 y Fh(Usage)208 1889 y Fj(pvm_ms_set_slav)o(e_)o(ex)o(it_)o(fa)o(ile)o(d_)o(ca)o(llb)o (ac)o(k)37 b(\(Ref_Type)j(func\))32 2066 y Fh(Description)208 2211 y Fk(This)29 b(function)g(ma)n(y)g(b)r(e)h(used)f(to)g(ha)n(v)n(e) f(the)h(master)g(pro)r(cess)f(p)r(erform)g(a)h(sp)r(eci\034ed)h(action) e(whenev)n(er)g(a)208 2325 y(sla)n(v)n(e)e(pro)r(cess)g(exits)h (without)h(ha)n(ving)f(completed)g(its)h(assigned)e(task.)208 2470 y(This)78 b(is)g(primarily)f(useful)h(in)h(the)f(con)n(text)g (where)f(eac)n(h)h(command-line)f(submitted)i(to)208 2583 y Fj(pvm_ms_run_mast)o(er)33 b Fk(represen)n(ts)38 b(a)h(task)f(whic)n(h)i(itself)g(comm)n(unicates)e(with)i(the)g(PVM,)g (p)r(erform-)208 2697 y(ing)31 b(p)r(oten)n(tially)g(man)n(y)f (additional)h(tasks)f(whic)n(h)i(are)e(indep)r(enden)n(tly)i(managed)e (b)n(y)h(the)h(pro)r(cess)e(that)208 2810 y(called)d Fj(pvm_ms_run_mast)o(er)p Fk(.)208 2956 y(F)-7 b(or)31 b(example,)i(consider)e(a)h(case)g(in)g(whic)n(h)g(initialization)g(of) g(sla)n(v)n(e)f(pro)r(cesses)g(is)h(v)n(ery)f(exp)r(ensiv)n(e)g(but,) 208 3069 y(once)20 b(initialized,)i(a)e(single)g(sla)n(v)n(e)f(pro)r (cess)g(ma)n(y)h(p)r(erform)g(man)n(y)g(tasks.)34 b(In)21 b(this)f(case,)i(the)f(master)e(pro)r(cess)208 3183 y(ma)n(y)30 b(spa)n(wn)g(a)g(small)h(n)n(um)n(b)r(er)f(of)h(sla)n(v)n(es)e(and)i (then)g(rep)r(eatedly)f(send)h(eac)n(h)f(sla)n(v)n(e)f(a)i(task)f(to)h (p)r(erform.)208 3296 y(Eac)n(h)d(sla)n(v)n(e)f(p)r(erforms)g(its)i (task,)f(sends)g(the)h(result)f(to)h(the)f(master,)g(and)h(then)f(w)n (aits)g(for)g(another)g(task.)208 3410 y(The)c(managing)e(pro)r(cess)h (m)n(ust)h(k)n(eep)f(trac)n(k)g(of)h(whic)n(h)g(tasks)f(ha)n(v)n(e)g(b) r(een)h(completed)g(and)g(whic)n(h)g(remain.)208 3524 y(If)30 b(a)f(sla)n(v)n(e)f(exits)h(while)h(w)n(orking)e(on)h(a)g (task,)h(it)f(is)h(imp)r(ortan)n(t)f(that)h(the)g(manager)e(pro)r(cess) g(b)r(e)i(noti\034ed)208 3637 y(that)23 b(that)g(task)g(in)g(progress)e (w)n(as)h(not)h(completed)h(and)f(that)g(it)h(should)e(b)r(e)i (reassigned)d(to)i(another)g(sla)n(v)n(e.)32 3814 y Fh(Example)508 3996 y Fe(static)40 b(define)h(slave_exit_failed_callback)k(\(msgid,)c (tid\))508 4100 y({)626 4204 y(variable)f(t)g(=)f(find_task_tid)j (\(tid\);)626 4413 y(if)d(\(orelse)i({t)f(==)f(NULL})i({t.status)g(==)e (FINISHED}\))704 4517 y(return;)626 4725 y(\045)g(mark)h(the)g (unfinished)h(task)f("READY")h(so)f(that)g(it)g(will)626 4829 y(\045)f(be)h(assigned)h(to)e(another)i(slave)626 5037 y(t.tid)f(=)f(-1;)626 5141 y(t.status)h(=)g(READY;)508 5246 y(})p eop end %%Page: 18 18 TeXDict begin 18 17 bop 0 -167 3600 5 v 0 -200 a Fk(18)1614 b Fh(Chapter)32 b(4.)73 b(Master-Sla)m(v)m(e)33 b(F)-8 b(unction)31 b(Reference)508 104 y Fe(pvm_ms_set_slave_exit_failed_ca)q (llbac)q(k)45 b(\(&slave_exit_failed_callback\);)32 322 y Fh(See)31 b(Also)208 477 y Fj(4.8)42 b(\(pvm_ms_set_mes)o(sag)o(e_)o (cal)o(lb)o(ac)o(k\))0 838 y Fd(4.10)130 b(p)l(vm_ms_set_sla)l(v)l (e_spa)l(wned_callbac)l(k)32 1079 y Fh(Synopsis)208 1234 y Fk(Set)28 b(the)f(sla)n(v)n(e)f(spa)n(wned)h(callbac)n(k)f(ho)r(ok)32 1431 y Fh(Usage)208 1586 y Fj(pvm_ms_set_slav)o(e_)o(sp)o(awn)o(ed)o (_ca)o(ll)o(ba)o(ck)37 b(\(Ref_Type)j(func\))32 1783 y Fh(Description)208 1938 y Fk(This)25 b(function)g(ma)n(y)g(b)r(e)g (used)g(to)g(sp)r(ecify)h(a)e(callbac)n(k)g(function)i(to)f(b)r(e)g (called)g(whenev)n(er)f(a)h(sla)n(v)n(e)e(pro)r(cess)208 2052 y(has)28 b(b)r(een)i(spa)n(wned.)42 b(The)29 b(callbac)n(k)f (function)i(will)f(b)r(e)h(called)f(with)h(three)f(argumen)n(ts:)39 b(the)30 b(sla)n(v)n(e)e(task)208 2166 y(id,)34 b(the)f(name)f(of)h (the)g(host)f(running)g(the)h(sla)n(v)n(e)f(pro)r(cess,)g(and)h(an)f (arra)n(y)e(of)j(strings)f(represen)n(ting)f(the)208 2279 y(argumen)n(t)26 b(list)i(passed)f(to)g(the)h(sla)n(v)n(e.)32 2476 y Fh(Example)508 2684 y Fe(static)40 b(define)h (slave_spawned_callback)j(\(tid,)c(host,)h(argv\))508 2788 y({)626 2893 y(vmessage)f(\("Slave)h(running)g(\045s)f(spawned)g (on)g(\045s)g(with)g(task-id)h(\045d",)1018 2997 y(argv[0],)g(host,)f (tid\);)508 3101 y(})508 3205 y(pvm_ms_set_slave_spawned_callba)q(ck)45 b(\(&slave_spawned_callback\);)32 3423 y Fh(See)31 b(Also)208 3578 y Fj(4.8)42 b(\(pvm_ms_set_mes)o(sag)o(e_)o(cal)o(lb)o(ac)o(k\))0 3939 y Fd(4.11)130 b(p)l(vm_ms_set_idle_host_callbac)l(k)32 4180 y Fh(Synopsis)208 4335 y Fk(Set)28 b(the)f(idle)h(host)g(ho)r(ok) 32 4532 y Fh(Usage)208 4687 y Fj(pvm_ms_set_idle)o(_h)o(os)o(t_c)o(al)o (lba)o(ck)37 b(\(Ref_Type)j(func\))32 4884 y Fh(Description)208 5039 y Fk(This)28 b(function)h(ma)n(y)f(b)r(e)h(used)f(to)h(sp)r(ecify) g(a)f(callbac)n(k)f(function)i(to)g(b)r(e)f(called)h(whenev)n(er)e(a)h (new)h(host)f(is)208 5153 y(added)f(to)g(the)h(virtual)f(mac)n(hine.)32 5350 y Fh(Example)p eop end %%Page: 19 19 TeXDict begin 19 18 bop 0 -167 3600 5 v 0 -200 a Fh(4.12.)72 b(p)m(vm_ms_set_hosts)2392 b Fk(19)429 104 y Fe(static)41 b(define)f(idle_host_callback)k(\(\))429 208 y({)547 312 y(loop)c(\(Max_Num_Processes_Per_Host\))626 416 y({)743 521 y(variable)h(slave_argv)h(=)d(build_slave_argv)k(\(0\);)743 625 y(pvm_ms_add_new_slave)h(\(slave_argv\);)626 729 y(})429 833 y(})429 937 y(pvm_ms_set_idle_host_callbac)q(k)h (\(&idle_host_callback\);)32 1134 y Fh(See)31 b(Also)208 1280 y Fj(4.8)42 b(\(pvm_ms_set_mes)o(sag)o(e_)o(cal)o(lb)o(ac)o(k\))0 1619 y Fd(4.12)130 b(p)l(vm_ms_set_hosts)32 1848 y Fh(Synopsis)208 1994 y Fk(Set)28 b(list)f(of)h(hosts)f(to)g(use)32 2174 y Fh(Usage)208 2321 y Fj(pvm_ms_set_host)o(s)37 b(\(String_Type)i (hosts[]\))32 2501 y Fh(Description)208 2648 y Fk(This)27 b(function)g(ma)n(y)f(b)r(e)i(used)f(to)g(sp)r(ecify)g(whic)n(h)g (hosts)g(will)g(b)r(e)g(used)g(to)g(p)r(erform)g(distributed)g (calcula-)208 2762 y(tions.)36 b(The)28 b(default)g(is)f(to)h(use)f (all)g(hosts)g(in)h(the)g(curren)n(t)f(PVM.)32 2942 y Fh(Example)626 3129 y Fe(pvm_ms_set_hosts)42 b(\(["vex",)f("pirx",)g ("aluche"]\);)32 3325 y Fh(See)31 b(Also)208 3472 y Fj(5.11)41 b(\(pvm_addhosts\))p eop end %%Page: 20 20 TeXDict begin 20 19 bop 0 -167 3600 5 v 0 -200 a Fk(20)1614 b Fh(Chapter)32 b(4.)73 b(Master-Sla)m(v)m(e)33 b(F)-8 b(unction)31 b(Reference)p eop end %%Page: 21 21 TeXDict begin 21 20 bop 0 802 a Ff(Chapter)61 b(5)0 1299 y Fi(PVM)72 b(Mo)6 b(dule)72 b(F)-18 b(unction)73 b(Reference)0 1848 y Fd(5.1)130 b(p)l(vm_send_ob)7 b(j)32 2087 y Fh(Synopsis)208 2240 y Fk(P)n(ac)n(k)26 b(and)i(send)f(data)g(ob)5 b(jects)32 2434 y Fh(Usage)208 2588 y Fj(pvm_send)40 b(\(Int_Type)f(tid,)j (Int_Type)f(msgid,)g(object)g([,...]\))32 2782 y Fh(Description)208 2936 y Fk(This)32 b(function)h(is)g(m)n(uc)n(h)f(lik)n(e)g Fj(pvm_psend)d Fk(except)k(that)g(it)g(sends)f(additional)g(t)n(yp)r(e) h(information)f(with)208 3050 y(eac)n(h)27 b(ob)5 b(ject.)40 b(Using)28 b(this)h(function)g(paired)f(with)h Fj(pvm_recv_obj)23 b Fk(simpli\034es)29 b(sending)f(aggregate)e(data)208 3163 y(ob)5 b(jects)22 b(suc)n(h)h(as)f(structures)g(and)h(remo)n(v)n (es)e(the)i(need)g(for)g(the)g(receiv)n(er)e(to)i(sp)r(ecify)h(datat)n (yp)r(es)e(explicitly)-7 b(.)32 3357 y Fh(Example)208 3511 y Fk(T)g(o)27 b(send)g(a)g Fh(S-lang)h Fk(structure)f(to)g (another)g(pro)r(cess:)469 3696 y Fe(variable)41 b(obj)e(=)h(struct)g ({name,)h(x,)f(y,)f(data};)469 3800 y(...)469 3904 y(pvm_send_obj)i (\(tid,)g(msgid,)f(obj\);)32 4098 y Fh(See)31 b(Also)208 4252 y Fj(5.2)42 b(\(pvm_recv_obj\),)37 b(5.10)42 b(\(pvm_psend\),)c (5.9)43 b(\(pvm_unpack\))0 4609 y Fd(5.2)130 b(p)l(vm_recv_ob)7 b(j)32 4848 y Fh(Synopsis)208 5002 y Fk(Receiv)n(e)26 b(data)h(ob)5 b(jects)28 b(from)f Fj(pvm_send_obj)32 5196 y Fh(Usage)208 5350 y Fj(obj)42 b(=)h(pvm_recv_obj)38 b(\(\))1758 5560 y Fk(21)p eop end %%Page: 22 22 TeXDict begin 22 21 bop 0 -167 3600 5 v 0 -200 a Fk(22)1578 b Fh(Chapter)32 b(5.)74 b(PVM)32 b(Mo)s(dule)e(F)-8 b(unction)31 b(Reference)32 104 y(Description)208 251 y Fk(This)25 b(function)h(receiv)n(es)e(an)h(ob)5 b(ject)25 b(sen)n(t)g(b)n(y)g Fj(pvm_send_obj)c Fk(and)k(returns)g(a)g(slang)f(ob)5 b(ject)26 b(of)f(the)h(same)208 364 y(t)n(yp)r(e)h(that)h(w)n(as)f(sen) n(t.)36 b(It)28 b(simpli\034es)g(sending)f(aggregate)e(data)i(t)n(yp)r (es)g(suc)n(h)h(as)e(structures.)32 544 y Fh(Example)208 690 y Fk(T)-7 b(o)27 b(receiv)n(e)f(a)h Fh(S-lang)g Fk(ob)5 b(ject)28 b(sen)n(t)f(b)n(y)g(another)g(pro)r(cess)f(via)h Fj(pvm_send_obj)p Fk(:)469 860 y Fe(obj)40 b(=)f(pvm_recv_obj)j(\(\);) 32 1039 y Fh(See)31 b(Also)208 1186 y Fj(5.1)42 b(\(pvm_send_obj\),)37 b(5.10)42 b(\(pvm_psend\),)c(5.9)43 b(\(pvm_unpack\))0 1524 y Fd(5.3)130 b(p)l(vm_con\034g)32 1753 y Fh(Synopsis)208 1899 y Fk(Returns)27 b(information)g(ab)r(out)g(the)h(presen)n(t)f (virtual)g(mac)n(hine)g(con\034guration)32 2078 y Fh(Usage)208 2225 y Fj(Struct_Type)38 b(=)44 b(pvm_config)39 b(\(\))32 2404 y Fh(Description)208 2551 y Fk(See)27 b(the)h(PVM)h(do)r(cumen)n (tation.)32 2730 y Fh(Example)469 2916 y Fe(h)39 b(=)h(pvm_config)h (\(\);)32 3112 y Fh(See)31 b(Also)208 3259 y Fj(5.4)42 b(\(pvm_kill\))0 3597 y Fd(5.4)130 b(p)l(vm_kill)32 3825 y Fh(Synopsis)208 3972 y Fk(T)-7 b(erminates)26 b(a)i(sp)r(eci\034ed)f (PVM)i(pro)r(cess)32 4151 y Fh(Usage)208 4298 y Fj(pvm_kill)40 b(\(Int_Type)f(tid\))32 4477 y Fh(Description)208 4623 y Fk(See)27 b(the)h(PVM)h(do)r(cumen)n(tation.)32 4803 y Fh(Example)469 4989 y Fe(pvm_kill)41 b(\(tid\);)32 5185 y Fh(See)31 b(Also)208 5331 y Fj(5.3)42 b(\(pvm_config\))p eop end %%Page: 23 23 TeXDict begin 23 22 bop 0 -167 3600 5 v 0 -200 a Fh(5.5.)73 b(p)m(vm_initsend)2707 b Fk(23)0 104 y Fd(5.5)130 b(p)l(vm_initsend)32 335 y Fh(Synopsis)208 483 y Fk(Clear)26 b(default)i(send)g(bu\033er)f (and)h(sp)r(ecify)g(message)e(enco)r(ding)32 666 y Fh(Usage)208 814 y Fj(bufid)41 b(=)i(pvm_initsend)c(\(Int_Type)g(encoding\))32 996 y Fh(Description)208 1144 y Fk(See)27 b(the)h(PVM)h(do)r(cumen)n (tation.)32 1327 y Fh(Example)469 1517 y Fe(bufid)40 b(=)f(pvm_initsend)j(\(PvmDataDefault\);)32 1717 y Fh(See)31 b(Also)208 1865 y Fj(5.7)42 b(\(pvm_send\))0 2207 y Fd(5.6)130 b(p)l(vm_pac)l(k)32 2438 y Fh(Synopsis)208 2586 y Fk(P)n(ac)n(k)26 b(the)i(activ)n(e)f(message)f(bu\033er)i(with)g(arra)n(ys)d(of)i (prescrib)r(ed)g(data)g(t)n(yp)r(e)32 2768 y Fh(Usage)208 2916 y Fj(pvm_pack)40 b(\(object\))32 3099 y Fh(Description)208 3247 y Fk(See)27 b(the)h(PVM)h(do)r(cumen)n(tation.)32 3430 y Fh(Example)469 3620 y Fe(pvm_pack)41 b(\(x\);)32 3820 y Fh(See)31 b(Also)208 3968 y Fj(5.9)42 b(\(pvm_unpack\))0 4309 y Fd(5.7)130 b(p)l(vm_send)32 4540 y Fh(Synopsis)208 4688 y Fk(Immediately)27 b(sends)g(the)h(data)f(in)h(the)g(activ)n(e)f (message)f(bu\033er)32 4871 y Fh(Usage)208 5019 y Fj(pvm_send)40 b(\(Int_Type,)f(tid,)j(Int_Type)e(msgid\))32 5202 y Fh(Description)208 5350 y Fk(See)27 b(the)h(PVM)h(do)r(cumen)n(tation.)p eop end %%Page: 24 24 TeXDict begin 24 23 bop 0 -167 3600 5 v 0 -200 a Fk(24)1578 b Fh(Chapter)32 b(5.)74 b(PVM)32 b(Mo)s(dule)e(F)-8 b(unction)31 b(Reference)32 104 y(Example)469 322 y Fe(pvm_send)41 b(\(tid,)f(msgid\);)32 549 y Fh(See)31 b(Also)208 708 y Fj(5.8)42 b(\(pvm_recv\))0 1079 y Fd(5.8)130 b(p)l(vm_recv)32 1325 y Fh(Synopsis)208 1484 y Fk(Receiv)n(e)26 b(a)i(message)32 1689 y Fh(Usage)208 1848 y Fj(bufid)41 b(=)i(pvm_recv)d(\(Int_Type)g (tid,)i(Int_Type)e(msgtag\))32 2052 y Fh(Description)208 2211 y Fk(See)27 b(the)h(PVM)h(do)r(cumen)n(tation.)32 2416 y Fh(Example)508 2633 y Fe(bufid)40 b(=)g(pvm_recv)h(\(tid,)f (msgtag\);)32 2861 y Fh(See)31 b(Also)208 3020 y Fj(5.7)42 b(\(pvm_send\))0 3390 y Fd(5.9)130 b(p)l(vm_unpac)l(k)32 3637 y Fh(Synopsis)208 3796 y Fk(Unpac)n(k)27 b(the)h(activ)n(e)e (message)g(bu\033er)i(in)n(to)f(arra)n(ys)e(of)j(prescrib)r(ed)f(data)g (t)n(yp)r(e)32 4000 y Fh(Usage)208 4159 y Fj(item)41 b(=)j(pvm_unpack)39 b(\(Int_Type)h(type_id,)g(Int_Type)g(num\))32 4364 y Fh(Description)208 4523 y Fk(See)27 b(the)h(PVM)h(do)r(cumen)n (tation.)32 4727 y Fh(Example)469 4945 y Fe(item)40 b(=)f(pvm_unpack)j (\(type,)e(num\);)32 5172 y Fh(See)31 b(Also)208 5331 y Fj(5.6)42 b(\(pvm_pack\))p eop end %%Page: 25 25 TeXDict begin 25 24 bop 0 -167 3600 5 v 0 -200 a Fh(5.10.)72 b(p)m(vm_psend)2751 b Fk(25)0 104 y Fd(5.10)130 b(p)l(vm_psend)32 332 y Fh(Synopsis)208 477 y Fk(P)n(ac)n(k)26 b(and)i(send)f(data)32 655 y Fh(Usage)208 801 y Fj(pvm_psend)39 b(\(Int_Type)h(tid,)i (Int_Type)e(msgid,)h(object)g([,...]\))32 978 y Fh(Description)208 1124 y Fk(See)27 b(the)h(PVM)h(do)r(cumen)n(tation.)32 1301 y Fh(Example)469 1485 y Fe(pvm_psend)41 b(\(tid,)f(msgid,)h (data\);)32 1678 y Fh(Notes)208 1823 y Fk(Unlik)n(e)j(the)h Fj(pvm_send)d Fk(function)j(in)g(the)g(PVM)h(library)-7 b(,)48 b(this)d(function)g(do)r(es)g(not)f(op)r(erate)g(asyn-)208 1937 y(c)n(hronously)-7 b(.)32 2114 y Fh(See)31 b(Also)208 2260 y Fj(5.7)42 b(\(pvm_send\),)d(5.5)j(\(pvm_initsend\),)37 b(5.6)43 b(\(pvm_pack\),)c(5.8)j(\(pvm_recv\))0 2597 y Fd(5.11)130 b(p)l(vm_addhosts)32 2825 y Fh(Synopsis)208 2970 y Fk(A)n(dd)27 b(one)h(or)e(more)h(hosts)g(to)g(the)h(PVM)h(serv)n (er)32 3148 y Fh(Usage)208 3293 y Fj(Int_Type[])39 b(=)k(pvm_addhosts)c (\(String_Type[])e(hosts\))32 3471 y Fh(Description)208 3617 y Fk(See)27 b(the)h(PVM)h(do)r(cumen)n(tation.)32 3794 y Fh(Example)469 3977 y Fe(tids)40 b(=)f(pvm_addhosts)j(\(["vex",) f("verus",)g("aluche"]\);)32 4170 y Fh(See)31 b(Also)208 4316 y Fj(5.11)41 b(\(pvm_addhosts\),)d(5.3)k(\(pvm_config\),)c(5.12)k (\(pvm_delhosts\))0 4653 y Fd(5.12)130 b(p)l(vm_delhosts)32 4881 y Fh(Synopsis)208 5027 y Fk(Delete)28 b(one)f(or)f(more)h(hosts)g (from)g(the)h(PVM)h(serv)n(er)32 5204 y Fh(Usage)208 5350 y Fj(pvm_delhosts)38 b(\(String_Type[])g(hosts\))p eop end %%Page: 26 26 TeXDict begin 26 25 bop 0 -167 3600 5 v 0 -200 a Fk(26)1578 b Fh(Chapter)32 b(5.)74 b(PVM)32 b(Mo)s(dule)e(F)-8 b(unction)31 b(Reference)32 104 y(Description)208 251 y Fk(See)c(the)h(PVM)h(do)r (cumen)n(tation.)32 431 y Fh(Example)469 618 y Fe(pvm_delhosts)41 b(\(["vex",)g("verus"]\);)32 815 y Fh(See)31 b(Also)208 961 y Fj(5.12)41 b(\(pvm_delhosts\),)d(5.3)k(\(pvm_config\),)c(5.4)k (\(pvm_kill\))p eop end %%Page: 27 27 TeXDict begin 27 26 bop 0 801 a Ff(Chapter)61 b(6)0 1297 y Fi(Mo)6 b(dule)72 b(Sym)-6 b(b)6 b(ols)73 b(Lac)-6 b(king)0 1581 y(Do)6 b(cumen)-6 b(tation)0 2072 y Fk(Although)27 b(man)n(y)f(more)g(lo)n(w-lev)n(el)f(PVM)i(in)n(trinsic)f(functions)h (are)f(pro)n(vided)g(b)n(y)g(the)h(S-Lang)f(mo)r(dule,)h(not)f(all)0 2185 y(of)33 b(S-Lang)f(in)n(terfaces)g(ha)n(v)n(e)f(b)r(een)j(do)r (cumen)n(ted.)53 b(See)33 b(the)g(PVM)h(do)r(cumen)n(tation)e(for)h (information)f(on)h(the)0 2299 y(follo)n(wing)26 b(functions:)364 2539 y Fe(pvm_delhost)364 2643 y(pvm_export)364 2747 y(pvm_freebuf)364 2851 y(pvm_freecontext)364 2955 y(pvm_getcontext)364 3059 y(pvm_newcontext)364 3163 y(pvm_setcontext)364 3267 y(pvm_getopt)364 3372 y(pvm_nrecv)364 3476 y(pvm_sendsig)364 3580 y(pvm_tidtohost)364 3684 y(pvm_setopt)364 3788 y(pvm_config)364 3892 y(pvm_getrbuf)364 3996 y(pvm_getsbuf)364 4100 y(pvm_halt)364 4204 y(pvm_tasks)364 4309 y(pvm_kill)364 4413 y(pvm_mstat)364 4517 y(pvm_pstat)364 4621 y(pvm_mcast)364 4725 y(pvm_addhost)364 4829 y(pvm_archcode)364 4933 y(pvm_probe)364 5037 y(pvm_bufinfo)364 5141 y(pvm_notify)364 5246 y(pvm_unpack)364 5350 y(pvm_send)1758 5560 y Fk(27)p eop end %%Page: 28 28 TeXDict begin 28 27 bop 0 -167 3600 5 v 0 -200 a Fk(28)1272 b Fh(Chapter)32 b(6.)74 b(Mo)s(dule)30 b(Sym)m(b)s(ols)f(Lac)m(king)k (Do)s(cumen)m(tation)364 104 y Fe(pvm_recv)364 208 y(pvm_pack)364 312 y(pvm_initsend)364 416 y(pvm_exit)364 521 y(pvm_mytid)364 625 y(pvm_parent)364 729 y(pvm_spawn)364 833 y(pvm_barrier)364 937 y(pvm_getinst)364 1041 y(pvm_bcast)364 1145 y(pvm_gettid)364 1249 y(pvm_gsize)364 1353 y(pvm_joingroup)364 1458 y(pvm_lvgroup)364 1562 y(pvm_settmask)364 1666 y(pvm_tev_mask_init)364 1770 y(pvm_tev_mask_set)364 1874 y(pvm_sigterm_enable)0 2102 y Fk(Similarly)-7 b(,)29 b(the)g(follo)n(wing)f(PVM)i(in)n (trinsic)f(constan)n(ts)f(are)g(pro)n(vided)g(b)n(y)h(the)g(S-Lang)f (mo)r(dule)i(but)f(are)f(do)r(cu-)0 2216 y(men)n(ted)g(only)f(through)g (the)h(PVM)g(do)r(cumen)n(tation.)364 2435 y Fe(PvmDataDefault)364 2539 y(PvmDataRaw)364 2643 y(PvmDataInPlace)364 2747 y(PvmDataTrace)364 2851 y(PvmTaskDefault)364 2955 y(PvmTaskHost)364 3059 y(PvmTaskArch)364 3163 y(PvmTaskDebug)364 3267 y(PvmTaskTrace)364 3372 y(PvmMppFront)364 3476 y(PvmHostCompl)364 3580 y(PvmNoSpawnParent) 364 3684 y(PvmTaskExit)364 3788 y(PvmHostDelete)364 3892 y(PvmHostAdd)364 3996 y(PvmRouteAdd)364 4100 y(PvmRouteDelete)364 4204 y(PvmNotifyCancel)364 4309 y(PvmRoute)364 4413 y(PvmDontRoute)364 4517 y(PvmAllowDirect)364 4621 y(PvmRouteDirect)364 4725 y(PvmDebugMask)364 4829 y(PvmAutoErr)364 4933 y(PvmOutputTid)364 5037 y(PvmOutputCode)364 5141 y(PvmTraceTid)364 5246 y(PvmTraceCode)364 5350 y(PvmTraceBuffer)p eop end %%Page: 29 29 TeXDict begin 29 28 bop 0 -167 3600 5 v 3517 -200 a Fk(29)364 104 y Fe(PvmTraceOptions)364 208 y(PvmTraceFull)364 312 y(PvmTraceTime)364 416 y(PvmTraceCount)364 521 y(PvmFragSize)364 625 y(PvmResvTids)364 729 y(PvmSelfOutputTid)364 833 y(PvmSelfOutputCode)364 937 y(PvmSelfTraceTid)364 1041 y(PvmSelfTraceCode)364 1145 y(PvmSelfTraceBuffer)364 1249 y(PvmSelfTraceOptions)364 1353 y(PvmShowTids)364 1458 y(PvmPollType)364 1562 y(PvmPollConstant)364 1666 y(PvmPollSleep)364 1770 y(PvmPollTime)364 1874 y(PvmOutputContext)364 1978 y(PvmTraceContext)364 2082 y(PvmSelfOutputContext)364 2186 y(PvmSelfTraceContext)364 2290 y(PvmNoReset)364 2395 y(PvmTaskSelf)364 2499 y(PvmTaskChild)364 2603 y(PvmBaseContext) 364 2707 y(PvmMboxDefault)364 2811 y(PvmMboxPersistent)364 2915 y(PvmMboxMultiInstance)364 3019 y(PvmMboxOverWritable)364 3123 y(PvmMboxFirstAvail)364 3227 y(PvmMboxReadAndDelete)364 3332 y(PvmMboxWaitForInfo)364 3436 y(PvmOk)364 3540 y(PvmBadParam)364 3644 y(PvmMismatch)364 3748 y(PvmOverflow)364 3852 y(PvmNoData)364 3956 y(PvmNoHost)364 4060 y(PvmNoFile)364 4164 y(PvmDenied)364 4269 y(PvmNoMem)364 4373 y(PvmBadMsg)364 4477 y(PvmSysErr)364 4581 y(PvmNoBuf)364 4685 y(PvmNoSuchBuf)364 4789 y(PvmNullGroup)364 4893 y(PvmDupGroup)364 4997 y(PvmNoGroup)364 5101 y(PvmNotInGroup)364 5206 y(PvmNoInst)364 5310 y(PvmHostFail)p eop end %%Page: 30 30 TeXDict begin 30 29 bop 0 -167 3600 5 v 0 -200 a Fk(30)1272 b Fh(Chapter)32 b(6.)74 b(Mo)s(dule)30 b(Sym)m(b)s(ols)f(Lac)m(king)k (Do)s(cumen)m(tation)364 104 y Fe(PvmNoParent)364 208 y(PvmNotImpl)364 312 y(PvmDSysErr)364 416 y(PvmBadVersion)364 521 y(PvmOutOfRes)364 625 y(PvmDupHost)364 729 y(PvmCantStart)364 833 y(PvmAlready)364 937 y(PvmNoTask)364 1041 y(PvmNotFound)364 1145 y(PvmExists)364 1249 y(PvmHostrNMstr)364 1353 y(PvmParentNotSet) 364 1458 y(PvmNoEntry)364 1562 y(PvmDupEntry)364 1666 y(TEV_MCAST)364 1770 y(TEV_SEND)364 1874 y(TEV_RECV)364 1978 y(TEV_NRECV)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF pvm-0.1.5/doc/pdf/0000755002606100260610000000000010330414315014077 5ustar houckhouck00000000000000pvm-0.1.5/doc/pdf/pvm.pdf0000644002606100260610000052507610330414315015413 0ustar houckhouck00000000000000%PDF-1.4 5 0 obj << /S /GoTo /D (chapter.1) >> endobj 8 0 obj (Introduction to the PVM Module) endobj 9 0 obj << /S /GoTo /D (chapter.2) >> endobj 12 0 obj (Using the PVM Module) endobj 13 0 obj << /S /GoTo /D (chapter.3) >> endobj 16 0 obj (Examples) endobj 17 0 obj << /S /GoTo /D (section.3.1) >> endobj 20 0 obj (Example 1: A Simple Hello World Program) endobj 21 0 obj << /S /GoTo /D (subsection.3.1.1) >> endobj 24 0 obj (The hello\137master program) endobj 25 0 obj << /S /GoTo /D (subsection.3.1.2) >> endobj 28 0 obj (The hello\137slave program) endobj 29 0 obj << /S /GoTo /D (section.3.2) >> endobj 32 0 obj (Example 2: Using the Master-Slave Interface) endobj 33 0 obj << /S /GoTo /D (subsection.3.2.1) >> endobj 36 0 obj (The master program) endobj 37 0 obj << /S /GoTo /D (subsection.3.2.2) >> endobj 40 0 obj (The slave program) endobj 41 0 obj << /S /GoTo /D (chapter.4) >> endobj 44 0 obj (Master-Slave Function Reference) endobj 45 0 obj << /S /GoTo /D (section.4.1) >> endobj 48 0 obj (pvm\137ms\137kill) endobj 49 0 obj << /S /GoTo /D (section.4.2) >> endobj 52 0 obj (pvm\137ms\137set\137num\137processes\137per\137host) endobj 53 0 obj << /S /GoTo /D (section.4.3) >> endobj 56 0 obj (pvm\137ms\137set\137debug) endobj 57 0 obj << /S /GoTo /D (section.4.4) >> endobj 60 0 obj (pvm\137ms\137slave\137exit) endobj 61 0 obj << /S /GoTo /D (section.4.5) >> endobj 64 0 obj (pvm\137ms\137run\137slave) endobj 65 0 obj << /S /GoTo /D (section.4.6) >> endobj 68 0 obj (pvm\137ms\137run\137master) endobj 69 0 obj << /S /GoTo /D (section.4.7) >> endobj 72 0 obj (pvm\137ms\137add\137new\137slave) endobj 73 0 obj << /S /GoTo /D (section.4.8) >> endobj 76 0 obj (pvm\137ms\137set\137message\137callback) endobj 77 0 obj << /S /GoTo /D (section.4.9) >> endobj 80 0 obj (pvm\137ms\137set\137slave\137exit\137failed\137callback) endobj 81 0 obj << /S /GoTo /D (section.4.10) >> endobj 84 0 obj (pvm\137ms\137set\137slave\137spawned\137callback) endobj 85 0 obj << /S /GoTo /D (section.4.11) >> endobj 88 0 obj (pvm\137ms\137set\137idle\137host\137callback) endobj 89 0 obj << /S /GoTo /D (section.4.12) >> endobj 92 0 obj (pvm\137ms\137set\137hosts) endobj 93 0 obj << /S /GoTo /D (chapter.5) >> endobj 96 0 obj (PVM Module Function Reference) endobj 97 0 obj << /S /GoTo /D (section.5.1) >> endobj 100 0 obj (pvm\137send\137obj) endobj 101 0 obj << /S /GoTo /D (section.5.2) >> endobj 104 0 obj (pvm\137recv\137obj) endobj 105 0 obj << /S /GoTo /D (section.5.3) >> endobj 108 0 obj (pvm\137config) endobj 109 0 obj << /S /GoTo /D (section.5.4) >> endobj 112 0 obj (pvm\137kill) endobj 113 0 obj << /S /GoTo /D (section.5.5) >> endobj 116 0 obj (pvm\137initsend) endobj 117 0 obj << /S /GoTo /D (section.5.6) >> endobj 120 0 obj (pvm\137pack) endobj 121 0 obj << /S /GoTo /D (section.5.7) >> endobj 124 0 obj (pvm\137send) endobj 125 0 obj << /S /GoTo /D (section.5.8) >> endobj 128 0 obj (pvm\137recv) endobj 129 0 obj << /S /GoTo /D (section.5.9) >> endobj 132 0 obj (pvm\137unpack) endobj 133 0 obj << /S /GoTo /D (section.5.10) >> endobj 136 0 obj (pvm\137psend) endobj 137 0 obj << /S /GoTo /D (section.5.11) >> endobj 140 0 obj (pvm\137addhosts) endobj 141 0 obj << /S /GoTo /D (section.5.12) >> endobj 144 0 obj (pvm\137delhosts) endobj 145 0 obj << /S /GoTo /D (chapter.6) >> endobj 148 0 obj (Module Symbols Lacking Documentation) endobj 149 0 obj << /S /GoTo /D [150 0 R /Fit ] >> endobj 152 0 obj << /Length 290 /Filter /FlateDecode >> stream xÚ‘ÉNÃ0†ï~Š9:R=x±¨¢biÄ¥ê¡JÜJ(x}Æm€z@–5£ÙþÏc’ޝÁ[‹Ò:¨¶LŠ¢7LõYk4Ù á¤1è¼(ÙÙµ  %æ¹r > õ¼4¨”‡²žñ©È„âw‹&S|• £,xž$ÇðI› óº{‹ÇÀSªË¸‹M³y9fWå¯>aç¡@Bÿ`³¹„š(Çt_é~±T—ð5ã`aɦìñï4A FøXôô$àWÈÇ횘"3†_b²–ß¶«L{¾!g” i Å`ŠB'É4cÝvÕæüó}QEܾì1Öݱc k¤CSütÜWû£¢£Þ‘ÒØ…£WZû¯ü1nmendstream endobj 150 0 obj << /Type /Page /Contents 152 0 R /Resources 151 0 R /MediaBox [0 0 612 792] /Parent 164 0 R >> endobj 153 0 obj << /D [150 0 R /XYZ 72 744.045 null] >> endobj 154 0 obj << /D [150 0 R /XYZ 72 717.466 null] >> endobj 151 0 obj << /Font << /F18 157 0 R /F8 160 0 R /F19 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 167 0 obj << /Length 144 /Filter /FlateDecode >> stream xÚ}N;Â0 Ý} 0ÄØ‰›Ä+ uCd«:QÁB&®OZUU„¼<ù}¹ž`ò˜T‰µÁûŒÏú½€,,£ dyæÞÐõŒCÕ´À¤–ñS1“WÃ4ø¿à×5ÁÕ—”‰ãr,p8g4²°<¶õeèv~ß—Neµ7¬ÿö¹©ÖEò,¿ó¬-ñs(0(endstream endobj 166 0 obj << /Type /Page /Contents 167 0 R /Resources 165 0 R /MediaBox [0 0 612 792] /Parent 164 0 R >> endobj 168 0 obj << /D [166 0 R /XYZ 72 744.045 null] >> endobj 165 0 obj << /Font << /F8 160 0 R >> /ProcSet [ /PDF /Text ] >> endobj 171 0 obj << /Length 2751 /Filter /FlateDecode >> stream xÚíœßsÛ¸ÇßýWèQzJü"¾µ»¶7“™ô’»{¸¹Åf÷d;µœäþü.€\€àZ'!Ó‹›ÉL,‰«Ý/–‹— )¾jà_ubÕ)Å¥W—·Íê>ýû[•ð·°a«µÚ¢oþõõÅŸ¾r%ëL·zýÖyn¹aª…wW?¯ÿv¿áë»äëGxÑo¶Ã;±~ìÃýf ¯>€šK§æñæþ>2rýè6µ~|×û^þè ^ø7/à ñ»û>/tÇÛ¥#ÈrmHñÊ&:žŒ@—R%8ãø#R5YS6»@§ê‡ŒõfØU×!5§¤¤1LË.Uš§$Ø"Ç” ¥]!%Ê &»öˆ” ËRJâfHú”|Cýmwëÿ~ßÏj—KŬ–©„l¬Ñ†ŒÇŠ%Ø<ši™Uj¥:É´ÕOŒ7o‘õÕLA3ðLÞ‘Œ^î]!HµæÞl•R뿸·rýê¶a# #SSÎá%w\qþÿÑï7[ –¡„´YÿtÿàÞ]ù¯"y0mTgÂ_>¸o\?€¢,+²Œ·:MK¶¢ • Ù¸tØ$ Ä6û£¬EïÒ?ÿ›mYàCÖpK¦!ÚPiÈý+ÑÈ|[Ÿ‚G„Îð'J•7ÀkEªþv¾È •©#+ø¢ei í–Ndýz3TÛ~&®Æ56Ý¡ù `°¡ö#ï4B$1Ÿ1¾Nݶ„="û÷–³Ÿû)ÏÝ|T¤“ÎW$—Lê|%ZøÉ-ΜÜS¸ “;Ó^œÜH=1¹kÈ'7%+Nn$ëÐ?Îç5ìCQIWðEëêü5Ö5\ºú0ß•Ö-+ñ:Ú‚/Z›»:᎑H›o熫@—ýá0¿6"×É`ôEªʰV§|?ôgO颩fÖê:â‚/Zœ;@k„Ž»Z™™6Û°DÙ¼,(rkYì 8`,ÁÈÄ÷å\ä~¸S‘N‚»€Ømà ¸G wyÜQ¸óážk/Á«_†{Yw,‹€{]w¬ëªóáz~ñκ¥ÅÊ Ͻ U\¢i˜]ðkˈ©Bex¤ ‘áÜÏ@U¢ é4ªÀÉÙ1Ïu&SÆ`’ /e’N¥‚¦‘'„¦ˆ“IÓary€ªŠ¼àŠ”g83ÇòúßnæýDÓ0ÓtHU)Þ„¨¬‘(S°¯@I€²œÞ‰'‹éͼ4!œw{š´M‚…lj>'S¸ <É´‚ÔD©!kD %+2Ézø0Ü,9£ gV×Qæ]Ñ °¤1‰0švpŽg4Èç|åË›P56r…ý –,D‚'²,g8÷3°EÙBE: .Ò0¡ —`ááÒž —)\¸dÚ‹pAê ¸Ô5Â…’á‚dÑp©¡,Â…á‚ó5^×N»Ë”²XY¡]ñ6Ty 8—·m›D|Æìø= *Tj' ,§6÷C…ŠtP¸»¦ÜQ@ (Ý™@™ÂUJ¦½¤žJ Y#P(Y(HÖîêjN缎®à‹ÖÕA× M¢ë®ÿ4oQZ_i7_¤.w"%tºÉ&J•ZáæU. Œ;w¯¼ÄŸµ8"™à–“™û×GE: pPA­m)À 8s&à¦p—i/©'WCÖ8JV’E­×Ð5®SºâŠ1NW8ì®çNg`amÑ©Mð–µ]ªírçïx³»t÷ëü6›–)Ô[á6oCÍÑ6`Ó%±¿ ÎpöG$lbÙrÂr?˨H'±Ì-PZN={-<Ëìy,CáÎgY®½Ä2¬~™eUdE–‘²˰,‚eUtE–‘ºË]ôÊR U¦ë( ¾H…CÛ&D¢°¸”‡{£ê‹¾haxlRaowÃ3ºûþjYÎÁëÈ ¾hyZM"Žá`ñH@r—/‘ß Þ†"ˆ¿ÅGþroq r1BžÈEîg€|W‚<é4È·î/EA>X„›S›3)?Å«@ùL|‘òH>Aù²FÊS²"å‘,Šò5t”§tEÊc]GQ¾†Â‘ò„‘òX¡{Ökùé®T%™¬"Ð{¢å)ƒ›ÄHÞ“m5L1Í“½<‡i°¡fª°@ž¦æËY"X¢*‘”‰ªËIÉý T5EªR‘N£ªRLjê–ÿh¨zæ=ÿ(^ªfâ‹TEò ªÖ5R•’©ŠdQT­¡k¤*¥+R麹 PjÃŒ”uÄ_´8צu‰¶¥{Zy Ýd2‹¾HiÃÂ\+mO¯Q@G‰fVyÂÛP4>'Žc?ÏÇͨLM„]ÎTî‡ ,)!ì±€šéŽl°€=ó¹ ¯`3ñEÀ"ù`kÈKÉŠ€E²(ÀÖÐ5–Ò‹tEˆ,扳ë\§4ù,Üöâm¨"‹÷½à¸_ï{IàBdx‚Ër†s?\Š¿ÓBFŸgíŽxžÕ]#‹?0¶úßvžf}ùcüM5ôƒjÙc¬® ÇGYû·Ã¡ß=|S~šØ%ÍjÒQ\ew&”Öø,+,øÂ£¬™~NðIêNÆ Ð CŠÎ}Žu v>q3á%à"é‡þ.þ¤Y ]3ëâ‘ósË9ϼ”§ªƒÆß£ Mkù)ÿs’̨òÚz6v,ü¯'Lb€ÿÞ  endstream endobj 170 0 obj << /Type /Page /Contents 171 0 R /Resources 169 0 R /MediaBox [0 0 612 792] /Parent 164 0 R /Annots [ 177 0 R 181 0 R 182 0 R 183 0 R 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R ] >> endobj 177 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 548.873 258.093 557.784] /Subtype /Link /A << /S /GoTo /D (chapter.1) >> >> endobj 181 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 518.189 209.534 529.037] /Subtype /Link /A << /S /GoTo /D (chapter.2) >> >> endobj 182 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 489.442 135.949 500.291] /Subtype /Link /A << /S /GoTo /D (chapter.3) >> >> endobj 183 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 470.662 303.161 481.51] /Subtype /Link /A << /S /GoTo /D (section.3.1) >> >> endobj 187 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [108.862 451.881 264.419 462.729] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.1) >> >> endobj 188 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [108.862 433.1 259.189 443.948] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.2) >> >> endobj 189 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 414.319 306.814 425.167] /Subtype /Link /A << /S /GoTo /D (section.3.2) >> >> endobj 190 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [108.862 395.538 234.502 406.386] /Subtype /Link /A << /S /GoTo /D (subsection.3.2.1) >> >> endobj 191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [108.862 376.757 229.271 387.605] /Subtype /Link /A << /S /GoTo /D (subsection.3.2.2) >> >> endobj 192 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 349.947 253.646 358.858] /Subtype /Link /A << /S /GoTo /D (chapter.4) >> >> endobj 193 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 329.229 170.405 340.077] /Subtype /Link /A << /S /GoTo /D (section.4.1) >> >> endobj 194 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 310.448 291.496 321.297] /Subtype /Link /A << /S /GoTo /D (section.4.2) >> >> endobj 195 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 291.667 203.236 302.516] /Subtype /Link /A << /S /GoTo /D (section.4.3) >> >> endobj 196 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 272.887 201.804 283.735] /Subtype /Link /A << /S /GoTo /D (section.4.4) >> >> endobj 197 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 254.106 200.316 264.954] /Subtype /Link /A << /S /GoTo /D (section.4.5) >> >> endobj 198 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 235.325 210.445 245.675] /Subtype /Link /A << /S /GoTo /D (section.4.6) >> >> endobj 199 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 216.544 225.182 227.392] /Subtype /Link /A << /S /GoTo /D (section.4.7) >> >> endobj 200 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 197.763 257.453 208.611] /Subtype /Link /A << /S /GoTo /D (section.4.8) >> >> endobj 201 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 178.982 295.235 189.83] /Subtype /Link /A << /S /GoTo /D (section.4.9) >> >> endobj 202 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 160.201 287.514 171.049] /Subtype /Link /A << /S /GoTo /D (section.4.10) >> >> endobj 203 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 141.42 260.24 152.268] /Subtype /Link /A << /S /GoTo /D (section.4.11) >> >> endobj 204 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 122.639 198.748 133.487] /Subtype /Link /A << /S /GoTo /D (section.4.12) >> >> endobj 205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 95.83 257.934 104.741] /Subtype /Link /A << /S /GoTo /D (chapter.5) >> >> endobj 206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 75.112 179.475 85.96] /Subtype /Link /A << /S /GoTo /D (section.5.1) >> >> endobj 172 0 obj << /D [170 0 R /XYZ 72 744.045 null] >> endobj 176 0 obj << /D [170 0 R /XYZ 72 578.616 null] >> endobj 169 0 obj << /Font << /F23 175 0 R /F21 180 0 R /F8 160 0 R /F24 186 0 R /F19 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 209 0 obj << /Length 1200 /Filter /FlateDecode >> stream xÚíšKsÛ6…÷ú\R !x?¶m“ÌdÒtZk—fáHª«D'¶Óé¿/@‚â%^Û"ž©Æ ‹âñ=‡ü+¨ÿa…á…‘’P©ŠÕ~F‹ÿîÛ‹gi±ÄÙêÜ·ÙÇO´X{Í»%ÒÙâÿš.]±ŸIÁãëÝìjöû©ÂÂ,Œ¤„êPä§åìÕ[8â´(–Aûåúc)矖ï^½á¬UmˆPÒ ‚Ÿ›³òÃòõ‡åUÎ^/ONŠJìR’B•öW¤‰’¼Ö„3ßo¢ä ¶š8)}tjˆ¢"—=JEˆ§ï_çıænç‚—?öix&8aVÀ®Ûoqê7s¡ß‚HaâQÒñ¦V/; Å„"šwÓ߬~ô‚)C$sÓ‹µð`š«t'Øñó|¡eù¥Îø!µ†ë {£ÁF’Y?D†u<É|¡( ¿¤sà¨ûëÅŸ›¤XÒvé­ßü$á³ø·Õ^ÃaÛ—ÖÁpÙ=ñ Á:Ö¬ì çeÒyæÊ„¥áAHëT0©,L˜ÓY[JX¢:EE¤‰¤©õ›€¦$|–&ÿz½þûˆº¿ëOHÎË`¼Ì„TI°–5{vÐô²g÷8@H×[€†ÛžÖAÂœÎ›Ž˜_ÒKìŸJ"4ò«Ào€’ðY€@üõfçÊÑã'yê`¸ >µë؉àyáçq~¶·ü ·=­ƒðƒ9…‡_îÙîv—­¤cþvÈoqùóÍéEÏŽ«ò×ã|!X¹~¨þ³¹ñV”Wÿî/Ÿý/»»úÝ÷ñ±c{¸ oÈòÿ¡¬4«ðÇþp_U9ÝýõýöxH¯—;A´+@ÐÞ%G z1Òq¢¤è\7©™¿dÅýSfvn¯¾µOü¾¾‘endstream endobj 208 0 obj << /Type /Page /Contents 209 0 R /Resources 207 0 R /MediaBox [0 0 612 792] /Parent 164 0 R /Annots [ 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R ] >> endobj 211 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 704.57 178.083 715.418] /Subtype /Link /A << /S /GoTo /D (section.5.2) >> >> endobj 212 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 685.794 165.899 696.642] /Subtype /Link /A << /S /GoTo /D (section.5.3) >> >> endobj 213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 667.017 152.214 677.866] /Subtype /Link /A << /S /GoTo /D (section.5.4) >> >> endobj 214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 648.241 176.305 659.089] /Subtype /Link /A << /S /GoTo /D (section.5.5) >> >> endobj 215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 629.465 159.375 640.313] /Subtype /Link /A << /S /GoTo /D (section.5.6) >> >> endobj 216 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 610.689 159.12 621.537] /Subtype /Link /A << /S /GoTo /D (section.5.7) >> >> endobj 217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 591.913 157.728 602.263] /Subtype /Link /A << /S /GoTo /D (section.5.8) >> >> endobj 218 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 573.136 172.105 583.985] /Subtype /Link /A << /S /GoTo /D (section.5.9) >> >> endobj 219 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 554.36 165.485 565.208] /Subtype /Link /A << /S /GoTo /D (section.5.10) >> >> endobj 220 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 535.584 180.506 546.432] /Subtype /Link /A << /S /GoTo /D (section.5.11) >> >> endobj 221 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 516.808 177.006 527.656] /Subtype /Link /A << /S /GoTo /D (section.5.12) >> >> endobj 222 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 488.069 294.686 498.917] /Subtype /Link /A << /S /GoTo /D (chapter.6) >> >> endobj 210 0 obj << /D [208 0 R /XYZ 72 744.045 null] >> endobj 207 0 obj << /Font << /F8 160 0 R /F21 180 0 R >> /ProcSet [ /PDF /Text ] >> endobj 225 0 obj << /Length 2707 /Filter /FlateDecode >> stream xÚYI㸾÷¯ð!«D‘Ô’ÒÁL2:i$•É!“Ë’m¡µÔHrU;‡üö¼ZlWMÃI\ßòñ{´ÚDðS›4ޤƄ‘±›}ó!Ú¡õO”ôÃóNÇÎFf³[Ìüøøáá‡Xoâ(L½y< ä$Öaf³Ícñïà'÷”ÑàK…6Xš,zbù°fÙwDz-»³hµï`S{êš, Í  ˜Í¢t˜Ä9™åŸ-ùºÝ:·|ãF'ýhóßA/x„ípV+ x% ù´óà"«ñ£-GÜü+®Òõ_¶", ÆÎÏ{àúg¿b)ݰ–é|¬e8F†ëòE~èÁå^«úŽE`‡Ø…cÏ`Ú§šàñ4ǘÊç K²01Dø»ŽBÌ l¶XàP=­ãà¹'ã¾ Šݧѿœ@j’Åaškô] :ÚèÍzÚ„Zg2Œâ''ô Ä’×Aû¢#E ,~/TU@FÐÁG|¿ˆêì•þÐÍAŠ~?rw!2!°¿zâ )Èà»8hHíÛvw¹ѯ(yk*õ­F±><´k%ýöN2£q_ÐN’­oãHˆÝ硜2HÒFö©j÷ä s¯Óƒº/ °£ßSìë"Ëb¢0’Œ§ P_Ž\H&S*‡HKV&´6+X!ö¸;zŸÜMª‹.úÈÞ ' "JÊó:„H@‰ž¤îÚµGÜ×(>¡ò0JRÒòñDÁ6-ÓAÎkhš¬ƒ’੯üb?GÊn9âpv9ì=èTO$¦Á'Æ(þ ¸†ç Ò~*oc(޲0ì·FQœ%o¤¼8µ°¹»E ‡&{(l˜ä>œCVùÇ‘ŸnÎÍäNÚ Ú|œ7F/}é ZŠ­T¨’x/•ƒ«É‰®¸°nJaì©\Ïí”vŒ‹H›Ž` §›cM¢hdË׈8ë àãø‡mAI”ÁPÖÔåXòW1l%Õ731ÐA‡ù†yÁp‡…Î0L‡‘½"J5fô2ÂP©£¥‹í¤² ·cq;"›·"ÃÇÅA›Ep$:4i<9ç ÔÜà (°?78³Ý‰dü*ŸÝèÕì(í?|ÿ8Q3©0LêÙ\X¶÷Gð÷“Á»ÅhbrË€¼ˆ œÆñù·¯¯¯á~h®oëðØ½ )x~i®UŠMfj­ÒŸ”!7Š,?¶*LÕJÿDåÁ_;É/ã1åFd‘ãì§Fy™¼˜«µ1“e …ާ.ø™¤¯apÆÅ‘?¨Tš£nK'Qª”±»;÷üuÅ0râHÔS™WïTœ„©ñ'{ãÚ[XÈ€j{|z† XâkU×¼4oÓU²äœFUMˆ-íÂç }sŒ½ÊoÍ?_âzÔXWOtŒô±•Afb,Nóæ^»'Ñ’„÷Ðà5¥Uw>ž8eVY¶€ë$uf®ÑúxkXÀj|{—’æ-n–Û[ÕužÉ/[B Ì\@è ê v­/<Œ¸œez:)fç!rš”ÂÐpŒvåƒå`|¢.·ÊÖs !I˜_Ūëq*Ð×óp&Ð'•àN}_#èÖqóóÆÎ®6„`ȉæS›4ª10’r ž¿œ+¡A(kªUjL²lœ2Mƒ\(¸ÕiMªÜq?0K8DÓo=­Í~õ´í¼Î-À`3˜Ò¬é)S5tW–ÊȘٯҚ² ØŠ°ˆ£ñ¯Ç˸ºáØÉ°—’%¨„”5ˆÔdé¢ÂüZµˆß(Qb«‰9¾› Öx«~£¯eßU/…^}«+Íœ©õl7)R*¨j–Vfª½à«RûßD`MªÒoààïo>Rñ] `¨Úå0"[QÚ䥽“Ê`‹6ŠÍñÀ̘9?’´_Îl8ù&œi'n2I8ö®‘9\§3v4Ý(ÓOÝ0ú\'1´W2U ñò*¤¬¸ÉÎçÖ¡…H-ýÅÇm}Œ b<§|}Ai~âB*e¢Øl¥’rÒñ4øÞ—uùB‡µ‡Dl-¿–S ŽîiªÙ$IlèŠO)º5SjUrÕË+»eß°ï+Ü8óDìBÆç”Ì /åÔãÇÀ­«‘•4¢J9˜‰ZÍuv¾elxi#0Nqc˜ªu/˜µ¬Gë2`}U!•ôyàj½÷Õ1¸,ëï¢&pˆ/¸‡C?ýý­GÃw2|¯¼(æé¢`]Ç û‚5sr"ÆÕ¾bÇK,aÔÄñX¹Ÿÿõw¤8õ‰aí«ä왪fÍ·Ëð`žÑ4 Ð0œ9?dÔp] B)« Ëó{e ˜8íú/‡ëçT2æŠïfqü'DºÉÀ· —®I¨Èbmõõ÷°€¤üò¿wòf‡Ä Æ 5s,/ª²Œ]:"„÷#5å³sà}YÍ-ï¥Õ”‹XôwíÐÕ·Mh&©ç¦Ä_ ^ØÕ°”¡²v&è—ù¨È¸ˆsÂZº2¿---ÄwîoŸï§H–VóQa¢XÈ]63"ný’u@/ÚÏá(g«1mŽÒЪuR¸²!‘:!öröÅ”ö奶²-x!»×ë’ &.ð™)½o@JùDcÌ4OKù¸ÞÊ!% W ‹Jf¬È 6ÌW`Biúrº¶D—¬Ï“ Zº-îdÞòBMî‡GN­‰ùÞ\¹Ý¿\%†’,Žc†çÈs B=moIçy&as”,(Y:ñYlg§p©›N~Ážwü‚B˜!2–…WE—ÇØq ùÍ‚²Éòì¥~;Ýó¿ 9¶ZÔ{Ë€‡ó%ŒÒ뀿Â(‡™1w¯ªð2nî¾¹¥Âë©(÷p {-ÿ<½]àÿ«eF€endstream endobj 224 0 obj << /Type /Page /Contents 225 0 R /Resources 223 0 R /MediaBox [0 0 612 792] /Parent 164 0 R /Annots [ 227 0 R ] >> endobj 227 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [100.364 382.385 248.806 393.51] /Subtype/Link/A<> >> endobj 226 0 obj << /D [224 0 R /XYZ 72 744.045 null] >> endobj 6 0 obj << /D [224 0 R /XYZ 72 717.466 null] >> endobj 223 0 obj << /Font << /F23 175 0 R /F8 160 0 R /F19 163 0 R /F21 180 0 R /F24 186 0 R /F27 230 0 R >> /ProcSet [ /PDF /Text ] >> endobj 233 0 obj << /Length 750 /Filter /FlateDecode >> stream xÚ}UKoÛ0 ¾ûWø°ƒ Īdɶ|íЮ+P¬Ã‚]º GI Ä–'+Íß)),A‘ƒÅ‡ÈI…§ ~<­‹´–’2Y¦Ý°tÚo V–æ‚6ÊÛþ&oï,]Ïs¨lTz€3£…lÒ!‘¢ˆç]ò+ùyŠC‚¼–Œ² ƒÜ/“»G•6´©Dº\_¦_®ÞH•½/Ÿï ~öàMC ¦ :|Í8Ù¶“Ó6Ë…„Ó,WMI¾™(ˆ³ÔYí;×›]$q&¸º­‡×,çä÷K^ÐÊáÆµó'Ëü’ÉÏøÉÑž_8ܪմdÂß,à‡Œ…"Æ„ó  >lÁÐwYQ<-@[‚bD+#noÇ ­¿ã­@†¶½Ó« YƒÂš!é~‚ckõ˜AbÌ“÷Pf%[Ä¡‡g×Z"MÏVãkæ™ M“ç²E)h-dlZ—j3Îf§ƒëA‚SÅ£ôRrFž ¦? úÚ.ðÌ¢*i)q.hU4þRõTE`¾¾3h×úX¨÷³—!l5ªp0ðÛ™ñã,›½ÕѶ xkÈGo 2>UJð1küòó%ë]ãb½¼9\(Ø)bÉÓǰºâ¤´'›#S ²Ïx(ÖÏÁ&dnƒ ›J·Ÿ"):¢ªÇ¾»Å5®\0H[W‘\å“yúñòpGådͺ¿Ñ?¥hës+.È“ù|¢a§o>÷fPFÄy«w»xìlDEÂVÀðK&H¿Æ½m-s‹œw’§|9Ã…ÃlÁuSjIå鑹ÝI;Nô1_½¢ÇñT”s—ãù˜ÁdðµÂ×/$lQ„îZ¬o‡ë‹æUØÃ#á=Ηq(1L¬¿¸ÐsОÝ<<¸ˆc½Ó‹ øØ:FˆÃ5l>åŸQœæwh#Æ©Ýhúÿë ¯_YP{ãíôÿ—†ÅŽ”endstream endobj 232 0 obj << /Type /Page /Contents 233 0 R /Resources 231 0 R /MediaBox [0 0 612 792] /Parent 164 0 R >> endobj 234 0 obj << /D [232 0 R /XYZ 72 744.045 null] >> endobj 231 0 obj << /Font << /F8 160 0 R /F21 180 0 R /F24 186 0 R /F19 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 237 0 obj << /Length 1237 /Filter /FlateDecode >> stream xÚ­W[oÛ6~÷¯ò$'^$Jö²aV X†z}i‹‚µäXˆn•dù÷=‡I¶ ‚ !Ež¿óC†züPO2O A"{»zyO°úç†Ú]ÁŒ+a /\hþºÝüôã‹H’po»GË „ŠÌÛæýߪƒúE„\&> >oßAd*Q'èÄZåß! ~Ù<¡¼ðÇC“ØüËfþÐÂHýüXÆ\êe$3 ±”$,ÑÆ¶AÊ}”f±ÐKÀ&˜²š4›UEJd–€Ô|üðpc›¦$ãÔ Ô`–¥«¬åæñ¦ìAé¬ ’²Ôª¿+ÄEÁA¯ÝpA˜´bÃ¥z„¤ﭗѸ(óý)¢úÁ®7…V*†A{è_Ìò2­Ñ¨Õs±vã`Ã߃ı?Zå˶¬³Æ kð´|Sµ ˜ôŸƒ8ñÕ“Õ iœÀIc˜pÈ„aÂs£Ýƒì-q>ÅÃÅlæàˆeþX¸sw}1jö€Ê©Ô°n~ßNœ‰DÊÓ5ÆR¹`óõ8±;£Z8\Ø3—$>I4hL$O&Ÿx´OQÁ/ ÂúÅ ÅIUû‰_(r×ê;”ûù&ã¡àÚjÈ"…¡nÛß›C#©ö²ƒI!ô]…Ò¹R6YF¬¨ç¯ÀOéksØÍKÌÀÓ•!ÃXà`Üõ& ÔŸŽÚ‘fz‹Ûãp‘±›b€K;ööÅ·cÙß)‡çVhÔìF Ÿú÷k ¦Ø+èÛ%x¶÷z‚­Ìòÿ7•µÂ|@²,žÓ²Äô$“€*óÿÚ1W¦¬8V<ŽÊ ˆ—ªµÐЩÒ„ÐXBcˆË¹œ'÷Pù#æüŒaEcô†—@‹Ü²ÞÊÆ…d= »¾D^Œ6ô•;™v°Ry©qǰ³1G lÙ‹FqÙW] Œf¬5Ù1̳0¡‰¤„ÆgÀ°,X±Ñ6> endobj 238 0 obj << /D [236 0 R /XYZ 72 744.045 null] >> endobj 10 0 obj << /D [236 0 R /XYZ 72 717.466 null] >> endobj 235 0 obj << /Font << /F23 175 0 R /F8 160 0 R /F19 163 0 R /F21 180 0 R /F27 230 0 R >> /ProcSet [ /PDF /Text ] >> endobj 242 0 obj << /Length 218 /Filter /FlateDecode >> stream xÚ}PMKC1¼ï¯ØcrÈv³Ù÷’\+ ŠÑKéA|ÏVhý¬ø÷Mj©=ˆäafv&Y\Ç(U‰µÃ‡-0®*{ þ 2º@9íµ7X,‡ê™“æ„_3‰fÜ‚9à ÜÀõ1ÁÕ•‰ûrV`2M˜)÷Ëãi}&Ùe™M¦â¢‘bkX3œ¯­7÷¯»Ñ:oÞ­ IŒu)wæöãéyÕ¨`vë±5WwófþRo1CÿÜ´á±UÁE9¾´cýo®ýÐõÙ“°ÿ˰ßÀ©ð Jendstream endobj 241 0 obj << /Type /Page /Contents 242 0 R /Resources 240 0 R /MediaBox [0 0 612 792] /Parent 239 0 R >> endobj 243 0 obj << /D [241 0 R /XYZ 72 744.045 null] >> endobj 240 0 obj << /Font << /F8 160 0 R /F21 180 0 R >> /ProcSet [ /PDF /Text ] >> endobj 246 0 obj << /Length 2555 /Filter /FlateDecode >> stream xÚ­ÉŽãÆõÞ_!̉F k#YrH O&p#s°GbKD(QáÒ=ó÷y[qÕžô¡‹Uï½zûRR›þÔ&Ó›ÌÚ8±n³??$›#ìþýAÉ©5þß9عÄnv3Ì¿=>üé6Äij6OH9Õ&Nt¶y<ü}*®ýv§¢²ÝîL–FfûÛãOŒcã,Ï'ÙìÒ$ÖiN(?|.Î×z (Ãæ{¦ÎÇ™õùxªºíÎjutž¯š o\¿-yû²ÕyÔ¤ŽÊ‘:ž zóÄÿ{„|Ùê,jx£¨û²½tÑ—Œ.ûÜa+øzĶÂJ‹ËQˆžø6|ÿïâ"‰Î…t²è0ŒìÄÛ]–ä ׄÑ5C»/Q(¼2qªYø½pApyô(M‹ë nÉù“H£ØRObçÄeX¢{<«QˆCy`ÜêHKdå'ƒ(¯ãܤÀò„âÝšLÁ ìÅgazVðj”0\.[ûIòs¨º¾E~?!j°ó7ð—e±É´\ÏÆ¿ãW;ã“X¹l¡ánøÄªÚ` }ß´_¶¹EKÙ<-elýš(‹^×õø±‰Kb,ˆCû£“ ‘ñ=l _àa]}BÞø…·Ú†E¾øž)Žwä Ga£à“®BIy}¨Â•=Ò­X‡$ñ”FÅ•œ£Ú»…«qD’ºÉ;¸î(³óQÇZi.HÇå‹è ¥°€ÑϰOÈ×ñT¶»º|ÆÐ#jµ*˜c8íêO¢VÔe‹~_°ï ÊGø·Tr%#ƒãªà©Ø ¡=hî»¶¤V°÷3â伸zÂ7¨B娖¬2ʸ×7cH#Õâ²€¾a€§¢Bˆ¡-ù; v¬@aFD`8aKïqçDÁ_NŸðç\¤Ðñå“-ž(þ#ÿ×dãã.0=àç…®:2þt aˆ.:ô"Öª™Iœ¦ã¼’¾²1ø›¤r›ÆÎ1ž‰V¬ÒŽ*|²ÿföUô7I¢¿òÎÏhlj¶If´•7P$r‰úKLYcRW6úдõáG>…4¦²¶9b$’Úñ²uÎÐ3 æ!y$qf¡ýµi ןæØçs……÷j Ôã ¡j)È(¨×¢îÞr,Ž˜SÚ1x™Œ$1ÈÆåÐ *¤þÂp…p‚l Gì…¼wÞqbJ_f|cpyª˜ˆÐ ý=CKâJÓ‰Ls:,n€ô"WÛI}¹š6»>†H¦¢TЂ¡fzwhÛ"©T++îÂå窟Ü’µ…Ä%<Š|A¼ä}ŠB`·Ì‹YÚê™ .˜ "Ú ’šQËu=t”r±}@‚}ìR¿Te$™,olÔ1{W±/ìpÊ£ˆ¦ô2eÌ£sž£åK[õ¡Áïâ"0w"H|89­¼Ìø*z†¥ìt9¡æHt“{ø8÷ÒšmsÖ̉™’—ÅÚ,ôsÞß÷ ÿ—œ”î¹C“ >g>‘î:Ž>XŽÊÍüTqaÙ’` ú{À<¿Pª®E–À‰ˆäÇž1âN<ó!ÅÜ/®ŸJ›8E’Ç baî¿&.9…4_³>øá‡Ç±‡|åÚhøŸyìÆÿûðËoÉæmûOIl|¾y546 ßóƒŽ}îå«~øùá_S[/”v)jìgZöØÅ…«¨“eNÕ[l”ÌÚ¡¾K\@°¬Þ¸µµ»Nk'ÀéÿAº@êwÄÓÚÅ #3oØVÈ´ÂL‚-F ´š š#ˆjϺc@p¢šAº+Ñ}¹ðgñª’¤Š¯i5‚JmTÃó•Ì9âRÎ@‹¶¥áÖ4‘t‹~´Â…7È‘‹Jàžp¢ þwÜ”ñMmsæ)UÀÇmß[w…â ºè鼯J^pG´¢ÃyŒK¦Ž¿2ïBQT¯1~§Çm¤¹žuôÜs…[¼Çñ€…hæ"(\ÎD§Ù­NÃüE9££R”Gï(=¶Kc=Q¦qèJ:j:a…K“°WÉ 0.ΡVpszÊ`V’×#™ºn8ËX%Ol±|6FÝ”{\Ñ<¦MôƒRžˆC,‹|èvc&„ïËÈpy¸3°9'Iè žËÏ÷ÊDé±þߣág3ßµj×4t{­âí¢FjP×:#^‹WúrCí ‰û™‡I ^hkï0hÐàYDWî›ùžuÕ ò·£¦ÔB-Ñ6Ãdl;k®ç6&0n›çÈi;ô¯•AB5›¡wöé×s3¸‘W÷ss µ›hQn^ð¥2G ¶ÀpùADßå"z£«€ ;5ôØí6«>^YƒR€‡,6„ñ®š5Ý츩Å1·«Ó`q6 ÞÙÈzr§(ůÕ@›Åi–oTÿÓ?V…Ôn¢µªñ²pÛ²ÈÓlFß70Ê^{jþêš^BHÃ)Øá‹„žMš²Ùq6+÷!$ž¾¬µÇCi-:+zl¿]ʉÙñ«Ç)tÑYN¬ÎøM±±’ÊÏ|#=wŸ¤Y·!Ö-Å:V\µCö¥ŽYîƒÕB%%zkz‚Â$ÑŒ¤xcʼn‘Ò‹+l}Ö¡o›\}sèK/’AíKÉÈ6=ŠÂUëw?°•åJm U óo¢—I7Nqgy•3I2«íÉÔ9àzª“ü=¶Þ߭ߦ¡—£Í ¦¡7 DmgÄŸîÁÒ}–ÓÕ“Á’UG¤oáô^¿¶.~¨P ®Î.Mosãë™ÎyNÂóñZüxíÕ®ú€îƒþ="ñ n¥ùkxì$ÛioǺŽÐôv…4nŠ2ê´ö}¸ äÇ2Ü77Gw¬„ÛìA%X©øÄN´VŽXrŠÞ™B¹›ÔÞE]É^îàH^®ºð/g~xc€& ±Û)¶83áêöÇ ™#lœ«ezxý­=V.<º]ŸÏ+Ë$œ,ý“?f¡µ›[[z¡ªCeâZ¼\ÖÉÕ5}×0ßÝŠp>‰pvç2üµC»å¯g·ÿ§±[ðn"Ç¿§epò”_2¡§I Â Èèô;]Ü_øn|£ ¬1c¸’ùÜé4zs*ëºùnð\¾Áý? >ìM(¤ÏåÇ:Å%Ï笻ñ ¼÷-¾G¿y>?Ý~‡’Ý7XÈÞȇï»Q¦Óq꽟át7¯–ÜÅ.ñòîoéã–ë þ½ÿendstream endobj 245 0 obj << /Type /Page /Contents 246 0 R /Resources 244 0 R /MediaBox [0 0 612 792] /Parent 239 0 R >> endobj 247 0 obj << /D [245 0 R /XYZ 72 744.045 null] >> endobj 14 0 obj << /D [245 0 R /XYZ 72 717.466 null] >> endobj 18 0 obj << /D [245 0 R /XYZ 72 413.083 null] >> endobj 22 0 obj << /D [245 0 R /XYZ 72 234.916 null] >> endobj 244 0 obj << /Font << /F23 175 0 R /F8 160 0 R /F19 163 0 R /F30 250 0 R /F24 186 0 R /F33 253 0 R /F27 230 0 R >> /ProcSet [ /PDF /Text ] >> endobj 256 0 obj << /Length 3417 /Filter /FlateDecode >> stream xÚ­ZYoãF~÷¯“a¼6Ø6‹œ@³‰±yH‚%Q6cIT(Êÿû­«Éæ!e 0¦º›ÕÕu~UMµˆàŸZ¤z‘ZF6^¬÷7ÑâF¿½Q2-æÍýyóëïÑbk~¸‰B›g‹xŽBmóÅþÆ-Ï»›ŸoþÓQ`ƒ µQ%Hä«û›/¾Éy˜'fq¿õ·¿ßüºTÑíï÷?|ñVý£Uhb N+þu«–ű-›ÛÀdfiÂÛ Ëãå׊ýqWžðý›¯ï»ýãÈ^;`€ó·`ŽÁ( ãÈÐö÷åm c»ü-RXiN·Z¶8f–Eóp†±=•‡[¹‰¶æc©¼'œÛ0Ñ™œêø¼3®2æ6évŸhÀtP9jÀ„Êdòk¤G+ðˆÑA}†T–„¨Ú?îéX¼˜wO&: “4ÖOG8c¶,×xê Ž’=”Z'®- f·cq‹ö±Œ¬ƒiYJÝÁïâV§Ëg£Ì”x¤Õ«¿£–`Ve ›^]`xÃÃEÏç½Óœ ¤cu˜&`Ê€Jr:U…°ð@Vx°–ŸI½Åé‰ÑñSæc]m_a]uxà¹úˆoUÄÑËá=⬦—XdEëÎLÚtùâ$IR¢= d÷倃Žx'2 zÚÑ‚NV0„[7Þ6%í{"Q%dÆ‹4àF;G{÷¼¿‡S~WŸÚ‰$àÎà7¼°>âð”$M!•d(MRAµ.ZdÃFx´‚%Ê?ø(ø<: Qi5YÙšät"•#Æóø¸rÚ ZmÑ´åDhô·à?³f»æ÷š䕨¸3-æ—7BÖù<1æ|'*8CΊ= ΉbŠD>ÉçPàû&1Ëz‹5;Œäaë³Ç‹‹ÃƽÅlâ*ò ÁªÆ3|¢-jÿH ¬œx¬ÉÞøÇ¾ w^ù׺>VÎ^Ocž+éŒÏ×ÿç{%Ž:¥ù‚aà ¢Õ¶ÚÀDù²)Û3Å>߯ɲØeø™Ø¶Ò6LÍ•p«a×(NI ¡2ËÞn­À#6 ·Z%ðnÜmx%Üæ¡6Î-IÄpÈBÎ^4 •¯Ýñá/(™µÿÄ£¨´h¿’äEªi88-·uïÒD±ÆÅ>Ѽ·0X>6MšuU|¾”p›šÐêt çCùP´UGÉÔi :rg²Jcý(ÂÄLÑò $øÛª¡ÓÀˆð³>“¨$ÒbÖpö–…i¦ˆïøD´ÄYcM|1ë9L>–»]=ÍÜ`kàÙ‰ŽÂ8ýSBÈ/en¦xÄÆEei˜ª´Û,i¤àÕ× +åÄõaê/)ð”*ç.Uóaj•Q˜wÉâ)IºG’ûâÔŠ"Hfó®‹ÝNûè8r]…‰±—]׉ýñò¾âºŽÖDÞ>GÖ¨p(î¦\?O%‰Ðá›ÐaMh€Í¨fw0 á–ùîÐpZ*Q°Ñï%“â[ÒëÞs ™Ù€X¼/9·qèZÏbc'™ÈŸÿí—+ZxôHnàè$!M*F`Ìn uuÞVàX±Ž—ç? á÷$Oúõ[Gºã‚Ÿêˉ¤“á@'€äz n!–u@½åßv: ÒUAu ¥ÃÎp¢Ø‚ÙÄoéD*ðhM1z®C­úý®Ù^žé¿‚è(Ö ª%L‹OWrI “I̽:mÙ%Ð&–ø&}¦¥‘˜b ˜FÐyêwô('5r–)úqDÆ)ð†èµ›Ã!©ÎOD…Dý[ÂDøÇ!ÆAfÄ“l€W¶©$áÂå¿zh½ÔÄ&]þSøšBÀ.·O!SµqÚ: þdBµ<±m¨z¢ÎD51!…5±«òøLÅÁñ®¼ä›¨Æ?û.¯t'TŸŠb|«Ç’q.•ÞèpQ_ÿ`½ˆ«^ÊK86ÆÚ.®\ÕMoÍîõ6³””’´ãm7Ь zK'ã‹£5ï,º„¸fÍQâI/ˆ2²T¿°yD„c€›Wþ1¶2XÌHLÏX¬©Hf0½bïšC™YHßxW3ÂHIM'ƒ;†|/·=!.¨©–ßðÈ#£OOƒ@gXûrݸ]íC©ÆzèÞcs7VBa@©ðɉ¯¼ZÎh­óˆ.R8Úu…P…«v¯›I—6µ^?]ºôèMÓe”@šTÝž›.A€Ïåû¶ÚHÖ¼˜4-‘ç¤Éø÷—Ç^ZI-9O*¡Õ^µÅ …ƒÒMûðËâ†*Oà/pDS‚`:}…%®9#ZêHȱ§XÒ†¾~a hJŶn|KK©hðòî¿?òžâ †`Èp'œ¡cCëLþϲÐÀ àQâÞ–ÿ…TàÑšä0§Ýv×Ò¦ 8X-#: Ps¯€É'‡ÖsuÝg€À ¨ÖXs>òÜs¡=W^øõçÕN9F¥~ ëY'0R±NØa…Ç0WÕ¼¨Ók‹O=v!¢?· l¨33è°¬ÅÐ$áKEIæeÌ5%2_(þļ X«²«uÖWÈøÜ™8 {™æÄ³¸»ÎáÀD8‹¤ëfuÒ+4åŸä‰M)tžÜ®¹ÄÅ–œ‚UÔ2 ô üûòÈA59`†z[Ù¼uí½hÒ%Å&üÔ÷Ãä’g2ãåk†/%F…€’¼‰‘)àu€ít'%Œ dy: d0p­Ÿ€4 ¬ˆ¡>«ôk†‰Ü•àXIô.‡ç9u6înì1£ 8—Û¿â WœO¥dIIAøüDùX®G8arRM]ꜴCpè8s'‹=`À#…Lp>ß …tÇË?¤aÂ[Σ:ÉCº(üç¶9¯Û±½šÔ„&Jƒµ}nu´ØÄ^ ¨Òœ[C-º×c9ßVV}[íçÅ$pÓ§#Â2"¶•ÔÍøŒme¹,å&«†¨ž$sm¤©³§¡Š¯]ÌG1Tó »D`OÞÖóZGlÚô'O ”º5>ê0f`Ä~Æ„ÖuÆ j^«WLÛ®•ži„ϧ+m’0ÉÕ'KW½‹éÊ­AŸ‹¦*Vèw˜ð@sõö{˜À\Õ¥(Š":´9:ñ aC ËjŸ}~â§âUž>?}v×mnªöÞdÍÿ£åí.Ä€/£yBs1!·îGúB~pK×¿Š—º ß>òUà]É=È5øêÜ¿íö-øE*]cþ¤Ã+ÛvXÅHIwp”46îZŸa¶»íŸžV%`®Ë†ÌOdæ–øa`ÏMê 5µJD¶€ë¿GTfÎ&]w‘«S?ÑÕUÚ— ð|᪋»æDS¾\½sˆ~ò¤rÆ&v!<ØuÇiz·¡Í\Àì“D+»z™¼å¬å Ry`~ëS¿XªÆB€ò访M—§zïŠ3XäÎÔ÷ót¾> ´‚tI$õÓ1Еqœ¤u╵è˜ÑSða'©ÏÔÈÐШpˆ; ðPyµ7Zû¶Xw_ YÝ]÷Êg5̆Ÿ_¸šƒábæ»4‘&2«$=£$÷ulЗ :€ %Nœ ¿Nšö~åC"Ä%ý4w<úâµQ×îŽÄ)OtMSu· x[.~=¾M´úD‚vùÓÜ}˜„fïÄM…±M*NÂ8Voºw´ØøNÜ$ìAn IM>‡™• {e9×óÅ\˜CÒøTùÈ£w±çëÖP&)?üƒ3Bø ÷=]¯73I‡nêG9æ;Ò=þR7»Í_4‚‰Î¿kúÆ"ÉükžÌ&\ÑÊ¢®‰^µ+PÀiÊßoìxÍ;x$·„ç™ÙP”Í~%ĘŽotÚ¹ð¯€Rq|·™Ø„ij°‡š¤o+Ñ© §5E¼`y¹Rn;nýTí\«6Î’Ù¯¾ÅÃsÁ5òX1sØ5R@M÷BØÌ%A€<é0 nŠrï:s}éb|ë.Väû+XÉዯ¶h»þÝì×:̬ó$ú~ØŸøš¡‘’endstream endobj 255 0 obj << /Type /Page /Contents 256 0 R /Resources 254 0 R /MediaBox [0 0 612 792] /Parent 239 0 R >> endobj 257 0 obj << /D [255 0 R /XYZ 72 744.045 null] >> endobj 254 0 obj << /Font << /F8 160 0 R /F21 180 0 R /F19 163 0 R /F27 230 0 R >> /ProcSet [ /PDF /Text ] >> endobj 260 0 obj << /Length 3294 /Filter /FlateDecode >> stream xÚ­ÙŽãÆñ}¾BØ' 0iv7OyH;Ža'v?؆Á‘(‰QœÔÌ.‚ü{êêfS¤fØÅb‡}VW×]ÕR«þ©U¦WY‡Qœ¬¶Í]´:Àè_ï”ÌF«À„ENsÿ¹ûù×hµƒ5ßÝEa\ä«hG¡Ž‹Us-íÓÝÛ»:dqF)ùóýÝ—ßhµ*Â"5«û½þýîçµ u¸ ò"Yý®lžNÕ&0y¼Ö_m‚D©õ¿úZ×›@­Ïœ1ëáXqㇲª.x{*7F¯ŸñlþÛ;0 {÷¸·ÜV›_ï¿ûò›|Ä#Ö:ŒL8#Já‚»¯ïÝ=’(~PÞ?0i˜Äzi^ÁA:¦7wýu° E‹ƒ,ÊÂ$2#ݲUø¦ˆ¯R*Œt¾²kë§çæ·ê]=ü%üWÀK •~ñ;?.˜!0 t¦*¥-Úè|=- ’»î¹õ´ `¸­¨gZð…]Qq£GRo»ú VÈ«ßóbís‹ìá'hÞo€©!#¨ Ü7,’QD™Œ_‘X«ð†­J'ëû£0×ø›Òœ8ÃÜ…pžÒ^³Ye(Å*5&ŒM<—{ãä^(÷&L %½+É·°ñq‚™Ê’03ʈöˆ[ù ª˜ôÌÞå©C’µ°ôЕ͜ŸÊ€Èd »”¢=o‘/Ȱ(]oÛs_ïè,€àtÜ<ò€. f䉨öŒdùÚµ$[ÚÚ÷ñh-ÓXû’hå¡ÖæÃ4Ö`‚Še[XŒhìÑ@P‘8sç1…'÷Q i¨Âë¿5Ï€ö[ÕÓÍKyBqŒ×t¿d2‹Dj6:[_zéý©¸³]59E¨IO„r>qOBÁr¨áXÚÛîù[=)p Ò„.Ì SPNâ{ÙY*ƒú¬añ”)ĸ~ÔË3·¶m+€ÛÊóN”¶²­RTVXK;¢ÚCËÛ± ~êˆÙt4ÑŽ7…Îåa–e„ü½µCIk¹7J!_©F’‚Ù¦I¤ ßcDû©ÄëÞ&Bf1¡;ð$2Bší^ ¬Ï•ÜùÒ×Èúƒw;Q@UxòzmÀþDÖè^ ¸I£0Sñ*ÕÎUþ1FÔtYÀ-¬ÀFîcdRæ‰vŠ€Tçaf@_2pŒûþ‚R¹%ÑNù÷ßœ$€­É?›KóàÝtiv bø\vuù€a@¶ýi¡Öe<_tâó>èÒ¾AmÄ™b>£[ÃNÅa(Mšþ"ög^j0gЊ@IXâÔzÇ%¯˜é ÎmE¡ñº¬Œá”j†ÀvÞ‹Œ405Ь˜½ NâžKÁ(¹ôCwÙÑ ÆT†Èì㟖§P¿œ­ÞYéî@žsÅælQ˜ÝdóSÐ1à4Èé—t™š¢±+å<—´œê²BÑØ•Æ!ÜÛbQÄ*iS$!&Á’–ÂRd²²‡¥@dèÏ™:ˆüŠH ýÞ|[Ð&£týÔv§Ý›½Ó,,ŠXÖ³y‹BˆZÅʱý„B†8¨d}±Ä¥~l 5CD¿€ú¦iQ Ì:ÍV1(”¦Ši±°ØÌ´¨bGB»†d Ä5b ­Ÿ|ÄÖëˆ"j}ÄÚ‡ßg܆ Iœ<àƒx2àÇD¥ƒ(Ö¥ŽõÀJ«åì aà%Ol8I~öHó®©>»v`2È7§Ñ<\~·tH¬,yveÕPÎ’H`J:šä/GRýQfd‚#³æédÙ2T¨CEîÅ‚‰–ª;W†™›óÂé(W#Ç>€4Q&á´ªê=Æy‰+ŸÖ0Y µTô··.ù3•K.V$à¼Tñመ*¥ˆ± ã5û¥1 @ b휙<@ô§V~„ qæˆýJIÃØ](×6`%¬&·7Šã%~°*w8ú&¢J˜pâUµ«¹ØœnDPqÉý$™M7ð„óð¸Á7D # I¹z÷œ!©F© ±Ú3À]½ñÆšd+VœodaŒåI=­±yÑe()ŽhÏ=Š xDŽ1Ó˜¡¾'™¢¤‘.‚é5NrÓ‹œ×àw<ñB2y䎫k`G(Wu{.:pÙgÈÄà!îæéí¢ÚË,U¯Ä34 hñãO«‡3¨Àƒ5/‡çQ¨ÕxI_?—NŠñMäGB£wrg¤g ‘€+Ü^êþÈc qpTCºM¶=YƳ­+ Ùœð}ƒäõI™cok#q Wr¯+©®:ƒo0%ÅnUÜk ¸®ðî7×Ï1émå_h\Uy)-‰À:˜ŒX Ñö§yg +ð€ÍÓHI³,vÞæjª­,Öî^Ù£rëÈò¸à˜JpyXÒTåYFömÇ ¯`ç‚2•9Kª^Ê{JÏ`^¨xH½£¬ÆWª/@‡ãb94óäp7ú뮡Ã|’ ðÔ†œ¦˜ð…¬æ‘¢jÄB"{ÆB§^éÊÙ’Š×²…«0ú/AZô|Ïíî‚H`¨ìȉväÙeÝÂû1/EŽ 0î—è.nsŽö²ü$ÁIèã§ù­´‰Ìj!¥°Šc’eKˆ3¾‹"–ô<^ò‡Èz@!ÝÛU‡®’}ÄëZ$ɥΒôà{lb°fËÁ–£n:(qôí¤ÀH é =0m/ÅÑ û“Øà ñ¬ 0f|§Ê.³çǯû1Ú¿9ðÖZ¾TÞ:ó ‘½¤}l&ô-UçþÒ]-()æˆyÆD¤>A?GAw¬@Ïéâ¹ÚS5ÞrÊŠÅó̽zÏ_Ç“8búÃXÓRÝØG\{Kœa¾Ð6ªúÄãXsªÂ aª×Û®ìXnâIŠŽºñº°¹h±lcÊ×ïÆºvWWãïø|²ZK2ÒYéÊ™ÿžŸºŸúd}÷p€+ÛSÅõ\wŒº·õ|Íü$kV÷îªõðºqaX9æõÀ·ïéZ‡àÚ¸tЏú¡«I¡Ä+¦·lïÂ[¶ó8^*£Ò×ü‰ÿVafêendstream endobj 259 0 obj << /Type /Page /Contents 260 0 R /Resources 258 0 R /MediaBox [0 0 612 792] /Parent 239 0 R >> endobj 261 0 obj << /D [259 0 R /XYZ 72 744.045 null] >> endobj 26 0 obj << /D [259 0 R /XYZ 72 652.544 null] >> endobj 30 0 obj << /D [259 0 R /XYZ 72 244.519 null] >> endobj 258 0 obj << /Font << /F21 180 0 R /F8 160 0 R /F27 230 0 R /F23 175 0 R /F33 253 0 R /F19 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 264 0 obj << /Length 2634 /Filter /FlateDecode >> stream xÚ­YëoÜÆÿ®¿âOTác¸¾ôCjÄm¤pa!ý ꎖ“Ç ÉÓYýë;¯]’w”ê†ßrwvvvvæ7©UÿÔ*Õ«ÔÚ0²ñjÛ\E«˜ýû•’Õhµ6ažÑÚŸW·wÑj4¿^E¡Í³Õ ÆQ¨m¾j®¬Ñ2®¯>\ýËsXÃëÔFa” “¿Ý\}ÿ.[åaž˜ÕÍÇéñ7»Û@éë»›_¿§ÕHb´ M ܉âíµ ‹ÃPv×k“™À„×ë,ƒŸ?Í¡.{Üõó??Žìk\ãúzB°$`”†qdèøòóáz­³ ì*¤¼^«`ƒ-J\ÑÁÇ—êcw-S&h?⯠ڽдÿ6m'3m?ôL}ÂýÃ#Ï÷ÇîŸt\§TxÞƒÕ9!þ<ÎÄyæõb¿ãƒ«'ªž‰²ïeÜg€]UQó*œ­‚B¶Ð¡Gº£NƒGæw¬aêØ±ÂÑN” “’v-¼1$J;àØ£¤¸¯’OZ)鈡Àkîz¸BrUÉbN7î¼Nœ­îQÊ¡Üñáô$ms Éb¨Ú=ΣÎÚ†)†Ç’÷ü¤töž%ý½²0Mº×‡-=à 8ú7Á}Ž«ˆ…•W.ݽûˆŠuÆ‚Ô *Õóx’$¨|øýÏ„¼œÄÀö™Çu[ìn d'RùhÆ:‰Beq¢ÃSsî'Æf¡ãU’Æa¾}áðÆ;¼ÊÑá ðËäëÌå¯õ„ùÕT"«0Î?åjz–|â`Vi¦œÜ ;¸ø§ë8 Š1ƒ§ªxÃ7/C~¶é½À›‡6Ë–Ü_Á9:†ádíü×_+WD¼žð£[ét•¸ ‰«ãPÅþHº+ÿ{acDqô¨ÓôßÁXýxqáulÃZ'ajSâð“XS±—{ÖŽ€ð‚ó-jç$f NxìKçM_f˜¢Ì8çÃ…ÏHÒxs//}´'ä‹â#hà0UôŒ×ðM„ƒ¾.ð„'9F¡@¿Y)P4˜(ã…Äš¬WÆÿlU7ÎÖÍtW’…±u£A\éé¦Ý ‚Kn}uèÿ]Ñ\>Š` ^´†WÖJÑžBmç7…oòh@ „ï§þˆ”ízù ¸ªê< Ü¦à…ºr$ô°ð;ý'¡) ‡Ã¸°m÷=P{з¯½—a×0&\û¡càÖ'|ÊjÊž"ÕRîJ&”7Ÿ??ж%%4üÈ9^e/æ‘'Ú>“Ï®‘‹ªæö€D4¥–À™M³ï™“PHuªêšGˆã©ÛL<ñtÚ;SÉ(äñh¿Àö= ÿ-ä…w×™õâUÕO8£>wD- ¦Ž©‚7 ¡Ñ—¥AÏÞD_É™î²x¢; =Q¼­™T┟é°íq˜Þ0ck‚uуh+´Â3ZBƒcƒÿߤs {¢¡j8o %‘ÞQ0æÀ… ‘çóëMlïG®µŸ…ìãvè_SRnø²Ř–ë ^¶=WKq_#¬Ù(!¾ A0„aàC]<•çDC¼Ê•^ÅŽ&qòUÒñZO˜]HC`Œýy(Øû‡KPRq˜ä.@bH‘‹Š*¯,†ƒÉª¬Žq F6LœÖ¼¤/HèóÈú¶Ù}±X×Õ3P /‰¦±6 3 ©F;*¦ù7.qO‚N§Ëö1¶Ö"tïÏRÁ)Tã#«`Œœc=7iDK0ér÷ÃBb3(š´ýfYÈ„ßeÍ(ëÏD•=]…~ÀyÈá¡ÙÝÃSÏŸ域àöÏ››çCyûÏ;¼ÒÞ;5T|æF3>·äA0×7<ñ–ŒlwçùiŒêœÝxQnÿr7ãâr$ÓýÃÔdc¶Z1B5Ķ{D˜ß ÁÞF='þÂs÷b1ôYÐ×'~HäQøL¦¥%™vžC$lT˜‰Vuq/QWÞÿþó­& CÛ$ ±.jÄóg^$—ØïˆÅŽ·º_¤½ô@é0ÊôË ½ÍáíÁE­²¡Ž¾¯¯õ„Ù^}„±Éý/$ôk €†tgþ׫#z8:6⩲Už=; Pp)¬œí.ÔëíØGO]psýwßüòu—›s½É$£‚ì¬Ñ(¡ÒB²†ox^¶½M¦¯$ÉF'aDey˜&ù×u½…×zÂì²ë •‹JSà˜$Ï›ñQ¨“øÛˆ%¼^ËHðÍL¬ŽÓª™\1,kýmä^¯Ë•è0KfbõKÍxc•ØPÅù7K™&üêë$4Zù3')¦4,¢Ïf6”ËÜÞªîî^Jh,ñã¦?§`§ÇÊg1&…Lœ ç´'¿È(ûÆiÊOɼPiù†Éð£³Iî™™½ì ²+¥Îw.J…•›tYõ~,f‡ráÌgì&PàŠrº·q0–›öµ® €Á¡èF4 @4†¦¥ø5Íñ}´¬†~éÏE1˜œ]ìÓÐ߸§ ÿÒȆ‰endstream endobj 263 0 obj << /Type /Page /Contents 264 0 R /Resources 262 0 R /MediaBox [0 0 612 792] /Parent 239 0 R >> endobj 265 0 obj << /D [263 0 R /XYZ 72 744.045 null] >> endobj 34 0 obj << /D [263 0 R /XYZ 72 606.863 null] >> endobj 38 0 obj << /D [263 0 R /XYZ 72 247.719 null] >> endobj 262 0 obj << /Font << /F8 160 0 R /F21 180 0 R /F19 163 0 R /F27 230 0 R /F23 175 0 R /F33 253 0 R >> /ProcSet [ /PDF /Text ] >> endobj 268 0 obj << /Length 1665 /Filter /FlateDecode >> stream xÚ­XKÛ6¾ûW{’ŠåSôÐGR4@€6q{I‚…jkwµ-ÕÒ¦Ùß’²$KbÒVðÁ’8œù8CÎ|CQø±HóHKI¨TÑö¸¢Ñ=|ýyÅü¨þ'Ee”ôfþ°Y}ûŠ‹ˆS’¦"ÚÜ¡æ” "SmvïãòªY',.ÎëDè4–ë›×nŽ$:Ó8‡‚bC2žÙ)oòºYÜuNÞòµàñ§µ°Ÿ„Vñ«µ‘ñÓiÛìA¬<¹o‹;4B§mq±Á$2õ6Ò”0žZ’ÀT⌫¸²Ž8iõrsY,“”p–FÒh¢Ãåþµzÿ‘F;ðËë%ÂdÑßðL 3&:®$É$÷o‡Õ»ÕoßZ]IOYë»#“ŠP•],"Òc=•*kh\^×pio&¸Ñù‡Ã5¸TÊL$ÓŒP=¹¹/’ôdœIbü.X=5hðÝó©¬Àf½Ç(½Â9Ѷj½¢K’D!„ÞæJûõ7îð¹´‚Ûª«É:‘c7øò`-ƒ‹‘@fHaã¢/PÕÙyPaþU`TÝ?!ÿƒ6ÿñ~ÿ ßPµiÜ8…îyX”Ÿó³mb¿ð7^®Ñïö±¯gWÀ><å¨ÎFÇËr®Âe) Q,œˆ‹È¶<í|i `; …Ç žÂ+qiás˜í§Ö}œtºw:Õ㶛ŘÌ0FI–êð ëdfO˜Á…½üŒaqÅù0.k@V! ó æ’M3 (F¤CÎ|ý?¨G™ /“Ę^¦ÐQëp”‹Câ&jel„ö;—¥¾sP7oÏ—¯X0w½¸º§0ÕÔÜ*?‘“e[Ÿoõí°ðT]Z÷9óÅLH¹à° iOf.¤­ˆcd¸Û2Q=Ôå”À·C¶!œŠ‚mNÏ|ZÅó½—xÛöÉ3áÀŠ)ã!jÓŠ¸>CŽ© ‡’žE=M[ÄÉÍ1¦mÏÔ·g#3A§„!Bë¾ÍÿN ¼®06 `j€m‚N)H?T,Ëë ÃR)ÑPû°êCþiœ2L–-ƒÌë #ËR’Óë#+>ï›–Œ\ud°C¤•O ‡MÞ5µüëšZ–è¾—éi;]ó-­— w´K€jÚ (ßÏö@ÕŘGf]¼*¯*Œ ò‡¢¬ê„·O£ r(öúÈZUAd\@%UY…\Ày.‚Ä©Å8 °ÒE<ت âTÂ1x°²(=c¹‚'píz t^S8Q0Þ÷P¢ãš™º‰çKOÕÍžÌ\ÝlEþÅJÈòååÚô¸Ó`œAOÍ|Ånü½Çƒ¿qír³ýq }Å<‡´tӽÀo;„S8ž¾oePøÐä§¢|ª[ÞYÚyžtÚõ:Î.cßFxÈ{KOû§#aà‡9i'2/ñW,sí Ë•¹ ;ÞÑ~á~ÅK-r½Òéš½]éš¿\YS{·Âä®Vz¦j€DošE0yUALŠÂØ x§qúg)zs™àyUAP°ðÞ¿¿£Î%ôÖS8)ïdÿ×mŽW‚ƹËA}hÅ(ÏsÜ òР¼ª ( ÈÚ v$ú&xgÇ3M ¨S„g€üÀô¼îþkb·aÝbËVUžóá¸ì¶©›9Í#Å¡2O÷x0štÃ×uŠ3Çìí%Ð×pë-üÃPÝFendstream endobj 267 0 obj << /Type /Page /Contents 268 0 R /Resources 266 0 R /MediaBox [0 0 612 792] /Parent 271 0 R /Annots [ 270 0 R ] >> endobj 270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 210.802 113.594 221.927] /Subtype /Link /A << /S /GoTo /D (section.4.4) >> >> endobj 269 0 obj << /D [267 0 R /XYZ 72 744.045 null] >> endobj 42 0 obj << /D [267 0 R /XYZ 72 717.466 null] >> endobj 46 0 obj << /D [267 0 R /XYZ 72 523.786 null] >> endobj 50 0 obj << /D [267 0 R /XYZ 72 193.841 null] >> endobj 266 0 obj << /Font << /F23 175 0 R /F21 180 0 R /F8 160 0 R /F19 163 0 R /F27 230 0 R >> /ProcSet [ /PDF /Text ] >> endobj 274 0 obj << /Length 2264 /Filter /FlateDecode >> stream xÚµZÛnã6}÷WøQj•w‰èSo[´@v×íK[Š£$l˵äm¶_ß^dêFovUH(q8s8$‡sF¡K?t™±e&DJ„\n ²|‚·?,¨ë%Ë5Ounúþ^üñY>€ÌO ’ /ÿ6I™ÐËÃBpæÚûŻů­†5Xg‚¤D¡’o6‹/ßäKjÅ—›ÇÐüæá„ŠÕ_›Ÿ¾|ÃèU„ž*)AJ|»¢ÉsqjÊójÍsžˆtµÎµL~.jèiVkš@MÖØz=6ŠgÉ{üUÚaoVZ%—ã¶Ùawu´oß–­‚ò¸-ÌâûM;IDÌ[kÁx ðW 6*£²”P >!Y* oN9“i2^çý]Yo–Á{jv¹Žò,e¹XŠƽÌÀz°$æ@²¥Ò$Í™±½yÞåzµ„&—#ÛÁÕ£ý[ã»Îè}SËêâ0œàͬƒ’mi„-†¶Û(>Û§g®j?ØNJ¨dƒÏØcöž »iãCaÅ­“.Œ7gì@¿œÇêlg;p(?Øg„|tB…û{(ÌÜH½3>¸àÄ Ü¦» (Ý™¢· r=¥vª•íÜÝ#†ò+è‚Í~¿bºµfÆ6Ím=Ù¡Íôô_¸›Ü­™_Žûֻ؇KÆóÌÎçºVý)¡èÉÌ'³{«·l¦¿£8X¶/ìBVN+öÅÑÚÞïü*ìlŒ@ 7=hë±ý²;>¹ÁUñ`[§p?Ýò\Ù©€…´6Ý¡Wœ¤TËh\d¦â‚A«ß¿€ÕÂLî´,ÊxJY5ÌTÊ FS*5*A! pÍ ¯ÿ÷aÀ#¹à0JR„·l™Ã4Nƒ²È¤™cÒðv[ªÕ¾¹·ïþy.=•±<ä}0{2,ß쎣:ŠÆ2væ;h0ôug5—Îbuil碷O#¤§|1v·W ú,„ï‡0¾fùðáÖ¦·¶q×1„¢Šs€éÇÁ½ˆ1ºxêŽ?ëm§šâaÐC:C£û-™Úo^äãyXÌðÿÄø‚Ž«(ó2=&Ö 24F¼¸à)·f¦]z•™t©y÷ŠÙþ$òÅa-”Œ^¤^ÄfÄlŠ|š¦ÉWÌœ'_¡½ä+P÷ùä+ŠÍ‘¯Û4ùš–'_QXŽ|…°Æ.q˘fåÈW•#_!ªãe¸ˆ}:Ó":]q\Zšòzˆ«-¿ ’ ´õ{hÿòûÏSž†Ä+ÏtÜÓW™IO;‘ ê1‹ž¨÷-ŽäŒÐêS÷b³Põ@Ù$WqM“õY`y¶…eézˆ vÔûáâÈ àëy€9]q`p†$É;Èì!ˆrvÈǃAŸGÚ­®(JF©‰`!Ê+m‹`LjS‹˜¢Ó‡×1Íew‰›¢¹Ô‘‚ÍqïäÑcÈL{/òº‚BÌx[Pè[ÆX¼õ²Ìf7+ AUn‰þ‹û’É”n#!¶1Òä ûPØ曤½/YÖFZh¿{v?ºÚÎm±ß×…{è×3ã™Æá³• x° T7Ø‚Gm¼YÊUkÔ*éÎéTœ}}ÃVzàƒ/àÃEဘÒAT šNäC¯¨°w áÞ2Y\çH ;Çý Ää+’‡ÙjÊ00þ¢Û5µ»¯sŸ*Làö$‹ïÛ«Ìä¾u"_˜ˆþŸ Èl3ÁÆ GI±ô2aaÃû]7”âÓÝ5(LÕ(ð`Ýø¯œ«È”oÄ« ßTŸÈ!“—ÑôÁIXš!§ªW=Óʼnˆ-_›ŒÝ(M\•}~e"Ì&`Óu‰90ù²D “«J˜¦¿ÏÉÕ$b\I"€dN×ØÅš±¥^l¿&öw‹ùç¿°ã?±¼Iendstream endobj 273 0 obj << /Type /Page /Contents 274 0 R /Resources 272 0 R /MediaBox [0 0 612 792] /Parent 271 0 R /Annots [ 276 0 R 277 0 R 278 0 R ] >> endobj 276 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 569.837 113.594 580.961] /Subtype /Link /A << /S /GoTo /D (section.4.6) >> >> endobj 277 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 323.443 113.594 334.567] /Subtype /Link /A << /S /GoTo /D (section.4.2) >> >> endobj 278 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 77.049 113.594 88.173] /Subtype /Link /A << /S /GoTo /D (section.4.5) >> >> endobj 275 0 obj << /D [273 0 R /XYZ 72 744.045 null] >> endobj 54 0 obj << /D [273 0 R /XYZ 72 556.621 null] >> endobj 58 0 obj << /D [273 0 R /XYZ 72 310.227 null] >> endobj 272 0 obj << /Font << /F8 160 0 R /F21 180 0 R /F27 230 0 R /F19 163 0 R /F23 175 0 R >> /ProcSet [ /PDF /Text ] >> endobj 281 0 obj << /Length 2437 /Filter /FlateDecode >> stream xÚ­ZmoÜ6þî_±È—®YV|“Ä÷!‡k(P wqûÅ1 Ù«¬Ý·“´Žýï;CµÔ“´B¯–Î<g†Ï†/øÇ™XdJ±DéÅãþ*Yl`ô?Wœf“ÅJ2“Û¹ÿ_ÝÞ%‹5Èür•0eòÅgxN˜Pf±¿RRÐóîêÃÕ[ +0°ÊTÂ’•üëæêûŸ_fR¹¸ùÚ¿Yß.Óìz•½<]K±|Þ_ßÝürõÓM« ªxº L¶À¸A`’)™Ñ·4¯k(äBÙ— Qîë,i˜ÐbX¤+K –榫:¸Ò„åBσ‹tÅq¥Š‰´»©õ®°›‰JDøýÏùe…†e™(Ëuÿt¢b!ºÂù!$ bR¥>Æ’ŒéDRŒ]ó¥¾^q.¦Ã "Vð´]÷E¿)–+1á7Òµ ” Ar¥Y¢óÒ‘8Kµ54 .Òõ\Y¦:¸ÆͤŒgÙ<ÀHW˜HàôrÓVï`k!Øxl!Ê4³KÒ,‡ƒ/FÉDVÌ0iã5hùÃëáxãõk9Ü7!X&â–½ÌÀtpXÀ3&É©6,¡åŸÀêK‰VÏ |J)—Í=Ô8ÇOäàøS~Wã„ZµÚÂâÍ¡\Ó²Âþá¾áÜÁ=nQ}†¡‡ú©ÜíÞzC0b“dù²mºS¸ðýï¿Nm…T,“i|+.2“[A"èßj ‚Í`óyb¤Õ˜EX ƒ-àšeš[‹§‘Â%,½ØW$^.ó‰ó@ºV²,ÎS&á1Ä5’?DÆ:aX¤+K&L›ª±ì¡Ð©fX¤+KCG¢º»eêâUCUø˜èäCSm›>RÁs–¦ó õº¢H4)y/Þn^O´¨6Ï·w—Oœ/m8S+'ÏÜfA¯ô¸ß‡µð‰I¤>?8“|Ù&H@á´¸e“4­¢¤‰f}Òtïáñ÷_úqH)T»ÿ6½çª%—ËÝö@ rí^³•:xDøžÕù±±Y¦Г¯$zlÝQ4f«rãæoÙ½’·=‰ÖÎðñ“CSœp^¬ŠÀŽ“€Š‡ ½·©ßºÆ0 }PÁtw®3ÄP4"aF’°*+X¤H;[—;´³·5¯ñ°Áœî€ÏÖCO…uBi¿Ã•DÉĹ]ÀÎlÝÛz5›²rã•i°PV§òùZ§„g7)Œ²qW÷nmùàí…Ì™1¾/®_ë¦Ü›gè¶!á8™GŒt«““íÚƒª;öì³¹¶>±uSXìõè±rnT!#;nmÃ5Oç†FÎ%¸2M’å;ÔÜØ±Š"Áºû€h1íÚ8ºVøn„|‡!w¦ø¶gãÜÇÝ©¨(é{hߨ±o1¹c=†ÃýØl?&\•µBâÔÈôÎcK¨‡r.Å`k(vƳ2’é4fæ@f*5{Û âN6ÆO»aû# ‰,jX¤ÐhÀè†ô<"M†¾( çúŸ¾%W1 ^(u Ý{d ˆíÔÝ/¤`:z/CýÔý¾¾‡Fá¾W”1 `µûqÊ«p×JS÷êEfÒ«$b;û²tÙìMyõq¬·Wp¿‹ÙjìI ââ&ª Iü/¦Ú·RPúƒÝiBIÂÝjÕ°Ð{å‹‹ž‘-r"1[œgpïÏCc¸cM¯4LfY`ð¯wq¤* Lx®C`#¯†s ×Ã90‘ª(&² .¶&Â}XPÛ4DÞ°HUVž2¸4†°°éðcïj a¡¬8œ&¨ó³´Iúu´ ìSÒÌC›ʦi/§MfÁåi“8.¢MB\Úd`ž6‰ó´IÇaX7 ¿¨&²ªT´"ñZÈLeU/ò |IÌrË—ôM¯È1&ÜqD,‰±÷4Eá>vÛšlkêÈ?ˆ,±FH«LóšÏ4‹SK̤«Hä+øŒ˜EÏgô-Ž”‘kXG)ÁÕîÃ=âÒKþ=îÀéZÊF¸g[u ]®¾öÒÔ‡˜¸$ëy ’®8Ä\°šâ¢í¡ëÛ;óŸîc¤Z [*æñ§×+´±}]v˜+d.±2 ,Ò‡•)ÆyÕH¦&a Nû,°HW–í“»cï²ä8" ]Íã@R*ÁÉJàø19möu”!)·µ!–±™©ŒåE¾$ŠoY¢¾õa~Рʔȱ§-]`ó¤Ïðà 2<"3Ë@ê쩤DD–Û„2ŽÇÙ{¦¼q£…ûØÈÊ´ÂÕÆúau¸úC^]{õ†ç÷HíXAG+à4¬pO»í…¬±2‚½fb!p·fÿ¼…+ÿðBÚ ÷‘jI¨x%ʳô¤×%I<{²‚L‚_q– ÓHÒÄ9añÞ•žOòt ®-k¼e'fy>!Jëq»VíÊÆql UZkŸX0ã|€£èQÔÃ|K´æÆ«²9Wĸ!äÃØ…¼ªìAD8I"œ$ñ;Ö=PáÎUÀ Ò_H–”j‰/˜±ŽÙô Ø=<¸7<üèQ•­§w–¡š k´xDcO½ß^¦)i+ûÂÏVÌÔIõ"_OÄ {™åá)ågýjus 7jj«ªóå—¦¶Åúí°}qO6—ð_ÓuE…÷S(k:%섞Öùòå<$ ¡Fæ’䎇Nÿg÷ýl;ì§ÛÕ–ž 6ÎòS¡—¤Éö×/a,ëûŽ!pl™VûðCß³Þ#*g:ãó1-¦%ƒKj¢ž‹j[<ì¨VØ›ê½%ZÃÞå]U¯÷XRnw?¶ÇM0eäå†k×Ýþ£Ûöܾ9ÕoÞºç7ÅËùÍèzlåî]ÛÔoš<Ô¯¼ÈÛcÉlŒ2®°*zh."Sg†$¾‰ŠþKtP÷amb=> endobj 283 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 418.47 113.594 429.595] /Subtype /Link /A << /S /GoTo /D (section.4.4) >> >> endobj 284 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 77.049 113.594 88.173] /Subtype /Link /A << /S /GoTo /D (section.4.7) >> >> endobj 282 0 obj << /D [280 0 R /XYZ 72 744.045 null] >> endobj 62 0 obj << /D [280 0 R /XYZ 72 717.466 null] >> endobj 66 0 obj << /D [280 0 R /XYZ 72 401.501 null] >> endobj 279 0 obj << /Font << /F21 180 0 R /F8 160 0 R /F23 175 0 R /F19 163 0 R /F27 230 0 R /F24 186 0 R >> /ProcSet [ /PDF /Text ] >> endobj 287 0 obj << /Length 1944 /Filter /FlateDecode >> stream xÚµYmoÛ6þî_a`+¾ˆ"ÛOÙš(ºkÒC[ª­$Fldzä¤Á°ÿ¾;’’©7¦ÝTh$ñx÷ðÈ{îx¦ÓþÑiʦ©$Ét¹ÄÓkøú넺Ñxq¢•ûkòñs<]ÌÛIL„VÓxŽ zºÎÜófr1ù½Ö(1‰%*ùùròâšj¢%Ÿ^^ùæ/WgTÎ?_¾}ñ†Ñ“‹9‘IÚPâ—9Ýdû2?Ì#®øLy¤t2û-+`¤œGtCtáÓ”ÆÞ¾‡˜(‡C˜ÔbOhN(WætEž²,J%áðèãêá%1‹.–Ó†Åc’èª>VèT=,§+ +Í]ì¡%*Ñ©#í¢ÓÆ%áüA¢ôq›ìâ),ø)Nâ‹ò°Þ]w TÊä(H+]A¤ "„É&ÒËǽš®ï?~¸t(ä!/ÄJ†cþ$3ôN­¿Î‹%'†B÷å —övò”0È‘!ã•LÇz—F%`éÌ.ýfô ŒÇøì H„KÃz8bª(Æ€ ‘>íË—y„šÛ—c‘¯ì“aUFM Øû½ÁËð•Õ„ Ÿöè˜_–F´(ìÀ¾Ü w6•¨Kgîâ©& Rbµ¾'σ2X÷Ÿ¥JWä)k»“+È\š5üÙ¥.®"•ÓD¥‘´êpwuN•€¢‚ªQp9U!X‚¦X¢é¬Ì¦×ü€a¢Îœ›µÛ|‹0ÇsÄ.`PíJ†\aóæ±@Ál³ytõ@a³zf_¹1ƒ2›Ò~º»²oLÞ_m¬ ¯šàp¼ðÖP˜©“É!@=ÙD Á“"„J—sþWcìï7Ýbˆ RXÐ0“O TVLôÒ$]Í% Ó¢ÁJŶî^æs N x±ªvs¦g¥Ã w[7ÜêŽÀ§½otG•;í`Ëå ¼#ÇËq«×í.¶¦J´ï{£:µ)È^•‹¡Û.DT?áìÉ JäÛo»!Ã?è¶Ë ^3£qÛÅî!gõŒh÷‹DQfåzi#p•_­w.á4­6ùŽÐaQq\Í$¸ìmq½^=·ßÊõªŠ\³pu?µüm¾a£ë ërysRiÔÕJ4\g…“ž"AR¼–zz–Yá€}¸8¿¸xwöÇùâýùŇw—/­mEoL9äËûÅ!/Ž›²8pkxÕ³ðÑ¡\”Yq; Ç6ý3èo^ÄÙë?»k?RÏýTŸ‰ õ²Þ–¤åËòxØYѸÓIÙŽš½Õ’ùÞø9üîRendstream endobj 286 0 obj << /Type /Page /Contents 287 0 R /Resources 285 0 R /MediaBox [0 0 612 792] /Parent 271 0 R /Annots [ 289 0 R ] >> endobj 289 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 483.071 113.594 494.196] /Subtype /Link /A << /S /GoTo /D (section.4.6) >> >> endobj 288 0 obj << /D [286 0 R /XYZ 72 744.045 null] >> endobj 70 0 obj << /D [286 0 R /XYZ 72 717.466 null] >> endobj 74 0 obj << /D [286 0 R /XYZ 72 469.114 null] >> endobj 285 0 obj << /Font << /F8 160 0 R /F21 180 0 R /F23 175 0 R /F19 163 0 R /F27 230 0 R >> /ProcSet [ /PDF /Text ] >> endobj 292 0 obj << /Length 2899 /Filter /FlateDecode >> stream xÚ­ZëoÜÆÿ®¿â Å ðm¸¾`ôCŠØ­ƒ$hm¥@¥£t„îÕ#ϲøï¼–ZyTPDrw8óÛÙyîQÏ"øÓ³ÔÌRçTäâÙíæ"šÝÃè?.´ÌF³…UyFsÿ½øå·h¶šï."åòlö÷‘2.Ÿm.œ5r¿¾øpñï–Ã,R©(A&¿ºøú­Ñ³\å‰]Ý…ò¯–¿ÌÊÕå"ËãùþÒšùÇÍåoWß]¼¹jùi£•Aw٘ΘUΦòtÍóZÌzµq´Øå¦îÁ²¹2±™–ð‡åŒJ²¼«.›®8UId§Á%¼Æq% S×…µ.h/ñ_Ù˜Å*‰ói ¯q€Y®¢<í ,?U=Í™(Sé4*¬Fam(¸뮨.z¾.—=p`"à$Ó ^ãðœUÖÚ¼Ûb½F|7Å-ní‚üúm¼G*cˆˆ\§§«ˆC> œï£JgHØ Rp`ðÍ(U1X&ŠùŒRf‹\9íÐÅÁyyâP6ÇÃör›x®_3•vJÓ!ã÷!ðßçYBcû›ëM} þu½)뺸/¯qñ°ðæ÷kG]Û%)¤¼>ÖåÁ“‹ —žpÏëT¬ÓÁÕ É" éGÏXeÄú¡,/6³óoÈvê]?‚Âbu2*ÛÄ O­Så@‘àÄá^(ÞÄy¢ò( @åÏa€µ@…Æ“p¨×º‡ æ3“ÍV=lžfTž6VEqÖˆ›´È(``I€íOø’¶Ù™$¼Æ±Õ¦.é`È(q¦2ë¦%¼ÆaAäÎ!L…°†2Jš)“ëip ¯q\™#Ì;¸ªåºìlø³I€y^£ÀL”€ w÷qµ«û™Ä@ÞLâi€ ¯q`6R„ØW^õfD÷´ëvgýÝSc8a)ÅÝ©dAtÁá=ͨ<aÑô§Þ’z¦qxÏk›…"úE‡·.VÑDïyÃr™Ò/;¼M°žÆá=¯q\ù’‡‡òcÏãmÜ¢i<ÞóG–Cq²‘Cµ£ÓXcNãñž×(09ݶ#Õã@åèb]ššð‡]ƒÍÌÙ`ÄU£±•uTÖAùÓ; èHçàq©ç9Ô4ÚœoÞ@DŽÓìåÅ9•9s.•3¯EÀŒë¯ªFGƒIOt&—'1 š—ðzWA{è:¸†’y®©cš˜ðzT‚q¤»ÀÖ°µÐ#ê3=¢±Zi7 JÏk¥±±Êó.ÊÁ&1±Pïéi ¯%™ràs!2ìÛD }‘ËâIày^ãð,tRZ´x;£6Qs›8Ð Å.W6Õ£­P@s®ò$Ô =mw{]S]5B©—ìiz¢³^oƒeå`YÜ„5ЄY VM—Õîʦùî›_o`4c¿fEØBšx\•Û€£3`ðÿ =ÚcÍD;!C8àyNÏšr›Œëù™æ¬ž…WûSþ{ß?Ûš,6£…¤'q w„]Yèé¥!ï·ŽV·d_Ô—¯EÀ¬ß—èDY¸ q „~(جpXÂkT¤…CTCß¡Rói` ¯qXq¤"×ÝÅÁ¢NCäÈL2 2á5Ž,Å[×A6| ¨U¬í$À<¯Q`úž$0óE±m= 4á5Íæ*Í»VÖ?{_Þõ3RF'JS õ¼F‘Z šN:@¯žö%ƒ¼;no} :*]jÔxBj)Î…I&@©ß–õ-ÆeÊEû¦‚˜Ýû !Uj¶ób=ʼnÜ~.ÂÊ`‚©5^\ãˆbø¼^zSt†³jYî)•äY€µÈŸƒ"{É7Z<Þì)Ц¬¦6Ø2IÑð´ÿ¿gÚ Z"è'ñ΀ÙYõ4ã^: ,ï©£°Ø[CT#; ,ïµ£°Äs;Ú:㽚Nר{•ø‚ƒ>Ìt’ÍÛËÌË௉9TÄÅf¿.ѱ"ÌpÛºjÍ”H2JÚ@É>ŠÀæ%©-Ot}ߨ¶äõàaÕï…drÞÝñ §¹††,¼ôEÌWr•:àɃ"ÁÖÇDÓòÎÑ¥ C6¯Šrn |\Ϋ¯'Ÿ¯~—¯ç “Ĩ ¤ª9ج奓åàP§8ò¥NlˆýÛqÃÕHãÁ“X#ݨƒÁdþn+Ór…ÿmÁjÀ4WzÑô6ŽHïc쫨lSÃâ÷¾L|d­ÃŒ&AFOçB­²4¢€b.·É, çN¯ú0Ã_ þ'Ã_YC?«{jï¨#nùtgYÞQwŠ÷tÔxÇz×r„KøˆkSßWËWüÜTK8DÖùüØ46ðñØÇâP7kÚðåorØTm—×a®ñ³D/ð¼î|zÆŸsUwϤ»C¹®…÷ž¹pÿñ§ï¿ÿ짪áXãcÒR¼}÷ã»ÿ|óíçvQø\<ðÜëçOèâÎwpaN›â *£ƒ7Ç-,¯ªW¥¬Œs$Þ}õþÍ7ßâê~þJ¶bçß-d •\«õz@Û"õFD5:V+H¸‘Gajw{@™jU/JYè×C¶¤¸ŽŸ_øn0ôšÔÌbV<è/ô¹t8ñ?Äe,iendstream endobj 291 0 obj << /Type /Page /Contents 292 0 R /Resources 290 0 R /MediaBox [0 0 612 792] /Parent 271 0 R /Annots [ 294 0 R 295 0 R ] >> endobj 294 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 613.885 118.824 625.01] /Subtype /Link /A << /S /GoTo /D (section.4.11) >> >> endobj 295 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [287.341 613.885 305.024 625.01] /Subtype /Link /A << /S /GoTo /D (section.4.9) >> >> endobj 293 0 obj << /D [291 0 R /XYZ 72 744.045 null] >> endobj 78 0 obj << /D [291 0 R /XYZ 72 600.034 null] >> endobj 290 0 obj << /Font << /F21 180 0 R /F8 160 0 R /F27 230 0 R /F19 163 0 R /F23 175 0 R >> /ProcSet [ /PDF /Text ] >> endobj 298 0 obj << /Length 2135 /Filter /FlateDecode >> stream xÚ­ZÛŽ7}×W²7Ó¼³³O»I @6ž<9Æ -µFÂh$EÝž‰±Øß*^$öÇ Õ¬®:,«ŠgDç9ü£sÍæZ’ 9_=Íòù<ýyFýl>Ï8)ŒûsöþC>_ƒÌ/³œˆÂÌ_`œ&ŠùÓLpæÇûÙ»Ù.20i‘“\¡’ß;{kæ)Ÿßmbówë÷ j–î~ùî-£W–s¢¤m(ñÃ’.¶å©©ÎËŒ¾d™™B.~-k˜i–]À]d8zƒ=Ê%g‹gü¯r¯½]jñé°jv8}<¸§¿U›‹‚ê°ªÌì§»Ëbd.RÞÊp>‹ìj™žX‹ÂµPÎH!Ô\çšÈœÛžŸîŸêûºjîë}ù\ÝWíšûM¹ÛWëûU‰€öûåêq™I&ä2ÿÇ ‚iúÏ.n¥IN‹¹2”p­¡{‘,’qè£Ð’˜H ‚Wy‡þËâ¬]Ó”1"¨JÚfœ¶©!Š'‚ç/ñ[$\(Rä€*F4„[ À.@½LA ‚˜4ʈ„0Ž4õ ™¤9J51Ì´ìá6ÁÎölòº!R×>Wür®hçŠÊÿÖ9YAW›€PÙÂöT÷`I8c“ÀòºÒ°¤‚9Ö‚' ‡KsL“ÀrªÒ¨´²¯¶œUÕuùÐKŒr"x1 ´ +‰QE¤nu|è}âä°ã„ ›m2 ©ßÉ'¬þ @r£ùC[,NKNa* aO "¤¼½:8^‚8ÞëÊ"e.µÄX1j(ž!/d]Hë¡((›š×uš6DKÑ‚6«EAt´‚¯æu¥±··k¿´Õކj× [È sø ƒ® ±*ÚFy²ùåP­»9¬IO´½AW Ï ";Û  [8[èÊÇ‘z*‹œ@INÖÓHf¬ž[O?Ž' {Û—ÔCÕT³´å Ó3mzRjJL*94OœóE³­Ü ¶%ÝÆÓOÌ,â™S˜y9`»„ÖnÚ¦%œ]áô£{¸…ÇeJŽ£þÄL‘nO®"£Þt¸¤ß±%ÈÝwœ¥Ìy‰®¹C²‚(@ßÉõ{ ȼ°Aì«*˜×•EÊzE8 c\õžiˆu6 ,¯+ ‹C,-TC)T S‹i`y]iX.&¢½‹¶·îW-žš™×•F¦q(ÚÈNåPÊdÐ~B)˜[Ð•ÄÆèí ­Èõ’‚—©.Rƒ7¡iNCЕFZ0Bó6һϧʡÜÀ0´NCé(Wðy#½_eF’AÛ?Võ /—6»Ÿš\<{Ø#’ƃLÏz?à £ 7.Þmw¶¡Âºk‡1ÞíÝ7gÐlÙ{2äçÏø€/>B²Ö6ãƒø'÷&äùµ›mŽî³>Ùœ^­põoüë¥ûè×xØ3´}tÊü«‘-Ä—ê²/8Þ†’s©=PŸ 7:·ÀqÆE]ÊW.lå:»Z´²oÔ6A"Û)V1×\oKï-)® áJѪÆŠj ]ˆ¯\ƒÃ+÷zß  d>ákv úîèõ¿ìö{7ºnª‰²’ÍÖtɹò¢åù}l7Pʦþ~™ £|}«èx•vâqÀ%;\ÜP“ξRH»øòÉ9nð“·lñ·j7y¶pÀEð‘ˆä‡¡Ã—yDfQÖNyypâ%µó%¦áIÀV7ç‚~¨Ýósvô\Õ‘Ïðõ½|íãßs-Ï~Np*ë:n”lØóÈU\tãƒi8= èóŒæÉôÉŒ¥§ ‚+ùé/»‘Öû~ dxEÓIÃLA‹‚ƒ„ t'W0ŒæºŸ­†Ç@÷kb ORjAÆʦlv+—ä×Õfwð ßÑf¾Œ"efì]¶šÝúû¶=ÖÂ?‡JawŸáïÓÿµÏà:AqávÂxÌÁEõ7ïlka¿Ÿ?Aôchá—okÙ Âã0!Äî¸ãNéc¶óbß®¿ycaØwØ™BŸè¯ z! ñŠEV¶Þü_kµ#deäLp$‚ *ÛBi’¯c¬HFõUd,¨½Ä1” Ë dpýRŠ¥.AäAi'(SæAÛ»APF꾞 LbóeŒmœ œV (“°´Qm^2'†ËI°]7°qI”nƒƒêhÿˆØ§áLLÎëºNC9Vªîuœ$ƒ…G5U?#™±D¾€“LY¾p’]Óý+F–¡t„“ ác[elf<¹xƒY´ynÌ)¯D2c^ "¯ S»Øµ8Ð!P©‰”ê½Ä&¡#e£ôbŒkœ^œV “°½£JЋ“À ôb–§c\Áì"øj`^W˜DsÑfOS¯dÀ}Îði€y]i`pú£-`¯£•WOƒ4èJ"µ)Ú´‘¾šZ¤êú[N$3š¼È—Q‹)ãj±k} QSIxN;Ô¢P]b 1YbKˆÉ(DDø Ù!aÖò#B^IÆÝÆ¿Wº‰>±&ºÔf¤æJ¦ùW¸VÒ‰fadtµv¨^Ü MgÀnˆ@,‘-[W=®ÇW¯gt̹A°HDàœsÏ Mow(c6£?D 1t !/ñzö'aUR+×e1 b%Oü[Âg!endstream endobj 297 0 obj << /Type /Page /Contents 298 0 R /Resources 296 0 R /MediaBox [0 0 612 792] /Parent 271 0 R /Annots [ 300 0 R 301 0 R ] >> endobj 300 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 659.539 113.594 670.664] /Subtype /Link /A << /S /GoTo /D (section.4.8) >> >> endobj 301 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 287.452 113.594 298.577] /Subtype /Link /A << /S /GoTo /D (section.4.8) >> >> endobj 299 0 obj << /D [297 0 R /XYZ 72 744.045 null] >> endobj 82 0 obj << /D [297 0 R /XYZ 72 643.339 null] >> endobj 86 0 obj << /D [297 0 R /XYZ 72 271.253 null] >> endobj 296 0 obj << /Font << /F8 160 0 R /F21 180 0 R /F27 230 0 R /F19 163 0 R /F23 175 0 R >> /ProcSet [ /PDF /Text ] >> endobj 304 0 obj << /Length 1453 /Filter /FlateDecode >> stream xÚ­XYÛ6~÷¯ö¡€ŠoEZ4i AÚ¸}Ù. ­­Ý*•ì=Pä¿wxÈ–,‰i#؈ÇÇ™ÃáÌÐ8ÊàŽ$‰$c(c ¶d Ãã2·‹} .§£³Ï+víÎn¡WnÜŠ}GúòP×®‡ãMBt¼wã`ðwh©ùf$èÌ”?¶c…×Ï&à¯íQVðOL#ƒŠ‰@æõh^Mã™áË~ ¦dbü‡t„ŠZÌÙ#ô,]_=ÏWߺ«]Y?_™í¶yuX>W7¡w(%Òœ… ÂLÞCþ×;4¤û‹Þ¡4£P…ò³Gša<ÌÏîõx4rŒRfœ+㪫mê ç,N¼¾.Ã9QAbà^ܪC,_­¬W% iJ{pÚQKØl»ÿ %Ï0endstream endobj 303 0 obj << /Type /Page /Contents 304 0 R /Resources 302 0 R /MediaBox [0 0 612 792] /Parent 308 0 R /Annots [ 306 0 R 307 0 R ] >> endobj 306 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 563.142 113.594 574.267] /Subtype /Link /A << /S /GoTo /D (section.4.8) >> >> endobj 307 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 300.13 118.824 311.255] /Subtype /Link /A << /S /GoTo /D (section.5.11) >> >> endobj 305 0 obj << /D [303 0 R /XYZ 72 744.045 null] >> endobj 90 0 obj << /D [303 0 R /XYZ 72 549.126 null] >> endobj 302 0 obj << /Font << /F21 180 0 R /F8 160 0 R /F27 230 0 R /F19 163 0 R /F23 175 0 R >> /ProcSet [ /PDF /Text ] >> endobj 311 0 obj << /Length 233 /Filter /FlateDecode >> stream xÚ}OO1ÅïýslS¦·½b\Jo„Ãf)J«àª_ßÈÊÁ˜&ÍËü^ßLG•£ ÑÐX+É:èŒà¥T˜ºR42†3;²Õš`S< FÒÆßE“Ô6ÂY£¯zÏ–ìiJÀÒK’| ™'6kD½´½mŸ6+®I¬ÓbÖjõkÑd¤w®¤UÇPüµ{óI  †[)0DÇ»BFФ8Vµ,b_E'Œæ_õÊ—g­ˆžý¸«øm¸TŸóv ÈCŸë0ì>MŸqdÿÛÖ% JjRÎKº?_R°endstream endobj 310 0 obj << /Type /Page /Contents 311 0 R /Resources 309 0 R /MediaBox [0 0 612 792] /Parent 308 0 R >> endobj 312 0 obj << /D [310 0 R /XYZ 72 744.045 null] >> endobj 309 0 obj << /Font << /F8 160 0 R /F21 180 0 R >> /ProcSet [ /PDF /Text ] >> endobj 315 0 obj << /Length 1816 /Filter /FlateDecode >> stream xÚ­YÛŽÛ6}÷WèQ"V¼S úÐKR4@6Ùö% ÅÖz•øV[»É¢è¿w†I¶$î¶kˆuÍι4ÉáM4K´$2Ylfy²‚§?Ϩ+8ƒß‘™ÌE’õ¾üájöÍKÆ–¥xružãD3\-ߦ?Þ”ûfžÑ´:Ì3®U*çï¯^¹oÑFã798.ˆTî“ßþœÓôW´–é¯;ø¥éòv]¹/ç…Ho·‹¦£ÝÖ=|]]£{²]T­*ÊûW’þ%O)˜S&Óýœ³ônƒÍ^\µ¥"'ŒªD†°BãPÿš½}Ÿ'KÈÉ«YNxa’/pZÉf&ˆÌß­gof¿w9 ¾²ž³·#’äÒ´é±Ú.È´&Ê—Aæ}=€Ì0"9=A¶û8ÏK?£SšäÀ©‚(:Ê o‘u&."M Rx A­:'îÍýv·‡ªk¬òqÆ€pѰÁä<®éйN„¤„Jæ¨8g&-øÿg çi ±Ç ¡l”°,¸)ñFØüH ùN¢Ý¢9N¥Ši`¦Œçª³™L–7AÔȪ¤)‡IÆ¢½É "Dä LEîè°™A”Ædkö O9¡ÜLðÔûÊzΰ(U„Ãe—@™„yþ.—ù/Ûf€RA+Sâ2(½¯8J¨)ËÙ Ê«û}åP6õò™»ÁÊ8”š]kðÅʸ±—ãX7ÇU‹v÷ñSµhÜõÛgÀ>BÈ{H9 =7ŠPå|g2Eyo¨~ªŽ‹„µíaßÔ°0œšCÞˆE&硇-‚H¥\è«\‰ŽsȤL¯o±!,,x ÒÚ¿Ø` ¹…F¢Ó÷fp?ãc¿b°ÖS Ó/Ÿš]Œs(w äiT°®²ž¯&(h ÅÉÀ÷au:ɇ†yàÕ×…]•Qà˜›lLKIíö©OV¹Ä›Ú/ñåÚŒ¹ºßÏ3Èaå]l¯Ñä°)»Œ©!  ÂùXƒzº‡bÆ!*C ¸Rm—®,̆ÀÐ>ëíÊ4¡¸\™c¹úZëV€€Ý¾¬¡Õ/Ý£€ã¬°E=‚M–S$4 —ÐL¸xReƒ¯¬çlPZN%LµסZÜ € -/ÌûŠÙÿô™ãhBEøŒëmPŒuý.§"TÅÖP÷ɆõsuÖ°X®Úú­Ê¦rO—–­¥cS ‚¤'SÑŠ GXÝ–£G,E˘çáes¸mÙƒ\:TþMéeZ*;‚²ýζoÔÜTî«@5üÄMo×Á°ÒÂþvñîà¾mvî÷èÒf'—EX£×{÷¤My2ý<$ëè+Øí×õ¢nÖö ÃS2Õö©†’šxßïl&¿7Á¼Àð¥+úz¨x`'Ba' l‘‡}ŸVʵ}çÎKA·õ°:¥¥ß€ôpƒ´×T{оÉÖhok¾öOÝ¡ï#a ræP9YÙì‚ Å’#î~¥ÆJG¯ÊB:~{ž0 íîÆ6:¶’±ØLÚ4gÔ!=åñÅaå-^÷Œ=!2OkÓûÁÄm¡ÙPïC„% çi„/Î&ŽÂ44ÌœÄÃ"í18ô~­û1ÿ¿z÷¾âØ €Êlc‹eØ \XØVDùmE˜çï³8èbÒˆÓJM2$XÇß¹t¡ù@¶Âb-s%I°‰dxxÄÕcH„$/R‹à+ŽMÀvÉž‰uجX­+(aJ=²Á:àÌ¥«F1Pt9Ll©£Å6Ñx¨3©Ñ),V'u{šŠt¾âØ@j}:co·ûrñ9lOÏN»@è ûEsOÎÚ#Cö¸#Cªp •—92ì9›>2 F®YÁ7ìH°Ü(Í/ƒÎûzÉm¯ì£{àØJM˜ˆëÞÍÔ’LþÃÉa,r{txz()ô.í$Îk'£«:HnÔoaG1yFh_ ò>ì6#»GPgBFvŒPp<©ÕyWYçkäX¦R¾öØ‘5ƒWò"¨¼«(*©aá}T~ß8B¹BYÛã:“)Ây‹Gœ½FÂ…£×³p#JLûç—0°¾tIBÕ}õ$)â]e¯‰¤‰†Ð9® Â@ª_•wE¥A8s>š:\ªÆÎ*5K$.b´\ð6ë^Ÿ÷f¸%·Àxlÿ˜6Œð/GœüÞendstream endobj 314 0 obj << /Type /Page /Contents 315 0 R /Resources 313 0 R /MediaBox [0 0 612 792] /Parent 308 0 R /Annots [ 317 0 R 318 0 R 319 0 R ] >> endobj 317 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 206.567 113.594 217.692] /Subtype /Link /A << /S /GoTo /D (section.5.2) >> >> endobj 318 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [197.588 206.567 220.502 217.692] /Subtype /Link /A << /S /GoTo /D (section.5.10) >> >> endobj 319 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [290.27 206.567 307.953 217.692] /Subtype /Link /A << /S /GoTo /D (section.5.9) >> >> endobj 316 0 obj << /D [314 0 R /XYZ 72 744.045 null] >> endobj 94 0 obj << /D [314 0 R /XYZ 72 717.466 null] >> endobj 98 0 obj << /D [314 0 R /XYZ 72 524.31 null] >> endobj 102 0 obj << /D [314 0 R /XYZ 72 190.733 null] >> endobj 313 0 obj << /Font << /F23 175 0 R /F21 180 0 R /F8 160 0 R /F19 163 0 R /F27 230 0 R >> /ProcSet [ /PDF /Text ] >> endobj 322 0 obj << /Length 1927 /Filter /FlateDecode >> stream xÚµZYÛ6~÷¯ð£ TŒx“-úÐ#) @šló’×Özxm×–7Ýßá%Qã=‚ °,~žÎÅoˆÅÓþá©$SÉ*Ÿ.n&Åtoÿš`¿ZLsŠ´²kÿN>|*¦KÀ¼šˆi5ýÏ"LOo&Œÿ¼™¼›ü]KÈAA.Y a„ü~1yöBM5Ò‚N/®bõË!³O¯ž½ ¸`­¤Ä3œ]Ï÷Uy˜åTÑŒ£Y®4ÏÞ¼Ÿå8{í^¾ÐI¶‰]AVÒ0Š%PS±a»Ë/ΣQx±Bš1ïOΖ.`&»J#œÛ&âs÷qÜXøÊ} q ¿ZTþý• huíVì/ç76CŒ1àfª‘`Ôd#D[C*þý,´ùeNÀÜH¥4û63vÝJ=:« ÚcÙËÊ/­oöS& Ìʶº;™óÕê`WVsxYyµËy5wë-›‚(ƒ7°0]{AG÷i+ãÇÓ¢:Õþ<¢nrø 8CR¦ÛD„kbüøü?ã4ëíý¦×¿0,#2©8`zšZt¬}‹˜AóÜ9?t‚óܼßÈ9G‚ŸŠïòù‘O±nÖR†hhMG©úùàÞ\šç;í.ä"ÎîݾÀZ0oábäã{krg>І8A ru´ Q»QûäQõîeå‘°~½s…¤æ­ 6"º¡àŸÄ0/+m˜¢ˆ)Ò2l°Á&5öý¹kvH1,rL¡›©°¢©€Çh­ûÙd5ôezN$ÐÕ“œBCÂZD‚æT+ –çœðìW÷¡ÿ ù}û¹^øXðþã_Fªœkg.NVy„«ò±µR–Ž­üfrwsÜõ Ò‹¤n€n87¸”b+x}8r@" ,h(ð ÆPŽpÏ4L‡”‹$ DËa’ê0®ˆjé3±(N '•2Öùà²Ò¶1Øæ-Û†Š “‚=a^VÚ0È8R–aÉ&ê§⊵#5š!Vßés¤è‘:¬!9E2I&©8Ĩ8'IP+üIbd¥mcÎÚ²mo²d0DcD„836 #ÒEC÷N ›Ëd0&©BYc%Ï Ò­¸=êÔò²Ò¶ÁȦd»bOÛý|ñÕDÃs …  =,rõf~‘Ã,Ë=ý‚ágtf3˜7šà‰éÍæ|¤äû[5ŒŒÔ¼—•GÂÜ›ŠGWµFcéb·5y5vhÀÑuú̪!£G–CØën»3¤ëhç×ãÐy%IRm€tõöi)ƒ Î{«÷mY5£ ð;Ëÿ¯v†›[’<7ÃŽ›d U¼´dwòSGu]z¾Øùöä k·f6>Tf(˜oÜ+'za@×V£çÀÞé†ážµêá0 i¥T2f,bœñÏÑØ¸êàQàá)ÒÓ8pþ3NÁ:OTªŒBýh催 ÈGz^V ë;”@°–iwû²Ëìz†*†´z"C½¬´¡JÁðÕ6’æj½jsͱœ¡¨·HçLƒÍ¹ß½SJy}ïÔÕ>P½ÀÔu¡#žîüóx|ÿÚÚÒÏp§›Ò•äÜZˆ³±‘›Bo Š%=aÆ< çÜ)ÅÈÔ48:|±ø°Q‡B­T'G€1¹î :C©76æÀYƒ8OfÔ³r¯1'¥ûAc5]E‘T› wì³±1'’4>æ¤Ô…1'Ö÷1'÷ø1'i›sbÛ¾®7›1Êd<À˜ØyŒ‰@wdøiS#kœ/yŒÛ˜¹ÙŒä>¸D&s?ÂŒå~€Üƒ0¥4׌©«ºßt £Èw{‘WnÖ[KPé Wxîšso›n¹p—¬K÷öMèÉõÝšÌÜ5àqpÁu#%xÚu fÔurÍIi 4§«q þIÁàHSc÷¦ ÂkØ£jÑËÊ#a}B ±]¦›îýr[Ý?<‰•áþ!i¥¿ˆ­l˜Xµ^&Ø VÏ‚&S%ÂŒ¥J€Üݤ”×즫½_hXpÅb7ÊXˆôUc„õ‡œÏnRŠ»ÁP¢§/rÆ×èçv=øl#4Î]šæÒ dÌ•q/6“Pü 2£àÈ‹H×@/ówÓ1*ÓÈg2 ]ÈDʾÃca§1)Ã<‹‰ sÄw¨má2pÉÛ¿yˆþ‚ñ"’endstream endobj 321 0 obj << /Type /Page /Contents 322 0 R /Resources 320 0 R /MediaBox [0 0 612 792] /Parent 308 0 R /Annots [ 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R ] >> endobj 324 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 574.494 113.594 585.619] /Subtype /Link /A << /S /GoTo /D (section.5.1) >> >> endobj 325 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [197.588 574.494 220.502 585.619] /Subtype /Link /A << /S /GoTo /D (section.5.10) >> >> endobj 326 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [290.27 574.494 307.953 585.619] /Subtype /Link /A << /S /GoTo /D (section.5.9) >> >> endobj 327 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 325.771 113.594 336.896] /Subtype /Link /A << /S /GoTo /D (section.5.4) >> >> endobj 328 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 77.049 113.594 88.174] /Subtype /Link /A << /S /GoTo /D (section.5.3) >> >> endobj 323 0 obj << /D [321 0 R /XYZ 72 744.045 null] >> endobj 106 0 obj << /D [321 0 R /XYZ 72 560.509 null] >> endobj 110 0 obj << /D [321 0 R /XYZ 72 311.786 null] >> endobj 320 0 obj << /Font << /F8 160 0 R /F21 180 0 R /F19 163 0 R /F27 230 0 R /F23 175 0 R >> /ProcSet [ /PDF /Text ] >> endobj 331 0 obj << /Length 1461 /Filter /FlateDecode >> stream xÚµY]oÛ6}÷¯Ð£ L,?E ö¥Z`@ºx{i‹B±Ç‹¿+iýïw)’-‰Œ½xËæÑ=G—÷^Ø$ÁðGIÉ9Â\$³õ' øô·±«8IÊU½öÏèÓœÌóa„ÏUò ®1¢ÿtþi,@“Tåb¼›0:~^O¾L?ŒÞN›x„E|ÑÇÂX#ŒäZCœIû®#ÍÅJ½`=„òúa}•ËÍr’’qµ/72žkoÞ©ö–åH°X4š²îCÌcYOõz_KGŒg.mX"™Mè ‰Ðpæ`(Éšû^ÌGŠÓ@æl¬Ô ÖI¸@X¨#¥KºÑÉÓÕþ•úÝfÞ•›I„I/9R† —& I=L¿¾R^-áæ°Ùî€x_oâ¾_aIgv˜µWy†r,“,£³¬fþuU“”16ž—wňXUæý^k)! õ»[XyúŒ +-¼p+ûÝ$¥j\Ζwóɺ¬ïÝ‹RÀ!Êl[ƒæK]ž‹Pfa Ý-!3Êþ'ó²¨|u˜©æÆfa*Pù6Vêë %B! ÏW 3CÏ +ö3øý¦ê*¥4CŠ^F©‹UJ©¾ë…Ò¡ÚBuÌPë¤ôçÖM}«Íç½µVú°)&TŽúÍ}Û;³º{tu?3à`º…#@šO­-›ëUajQ‡ oSÐLXE7ÉÄ6ÉANp_1F羺ŒÓ†Aë`sP5>Ì?J…C½ªïm¨´50’2°-ìHT1{hOŽííß嬊øÆHˆ7‹‡ œç_bäé²÷û…1Hl&þ'ÿ°ÿ÷/&˜! 9ݿĈ}ÿB.g`¨(#*j`ÆvÀ×ã‚ûs&4#(ãqgâaB©t³œIŒûÈ™¨ å4Éc³ÂAÌñš‡œ‰)ìLbtΙø|/8/ÜëIT›u&¾¶§.šs½‰<Í›P Ma,è뽉,ìMÈ™®@õ(_ò‚/÷0¡êw3|IŒ¹ñ%]êþœ%BB;_»1_Ö'íVpy0·NCc&¬eáÛx„对™vLÞÿfçVcä™™@ž™ƒ%ãyn1Á<[È Ö"Æè¬E—q`\è6–$É[8ØEÌ…,è.|]/~…C2ŽpÆ/£ÒÆŠ«„=…> endobj 333 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 492.984 113.594 504.109] /Subtype /Link /A << /S /GoTo /D (section.5.7) >> >> endobj 334 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 240.664 113.594 251.789] /Subtype /Link /A << /S /GoTo /D (section.5.9) >> >> endobj 332 0 obj << /D [330 0 R /XYZ 72 744.045 null] >> endobj 114 0 obj << /D [330 0 R /XYZ 72 717.466 null] >> endobj 118 0 obj << /D [330 0 R /XYZ 72 478.636 null] >> endobj 122 0 obj << /D [330 0 R /XYZ 72 226.316 null] >> endobj 329 0 obj << /Font << /F21 180 0 R /F8 160 0 R /F23 175 0 R /F19 163 0 R /F27 230 0 R >> /ProcSet [ /PDF /Text ] >> endobj 337 0 obj << /Length 1404 /Filter /FlateDecode >> stream xÚµYÛnÛF}×Wð‘ÂÍÞ/(úÐK\4€ÔQó’†,ÑŽKVuqë¿ïìr—Z‰ÜµÙ0`Räá̙ٙÙC‰þH¡h¡8G˜‹bºáâ®þ1"þ..j†Œv÷þ}þŠ‹`Þ0âFÿÂ9F”›b1âŒúóÛÑÇÑ_…ÔŠc„¥5òëxôöLÉŠñuì~<û\R^}¿{FÉBŒAL*°f¿U¤ü6Ym›uU3ÍJªZQ~øTÕ¤ƒKä§ã}Ö¤àˆMl„I%6@,ŸMÓ®ü/6··›»~n)âDf}SißÄ ëï öÆúÆ#."°;{L2=òtµ•süJj‹cß ±Å(2°·xHrº\vòúòU˜’_LI7ës™Ž0©LȳäWÎ÷É/&”+Ê̤VC¨”üŠ,¥åWÎ]_±¿GäWdîtù•åæåWÌÍê÷çÊ/ó4ùÅ Ò‰ /£¿"ci@–én¹šL+FÊš!¡òov&Õò –óÜi°c×ýQ ›¬K«vìPµñRñºÙÏä ¼ÇâlÑ8A¶±úÈ]¸Úø &Ìɵuka3Û”Û;oÃn2뉵ò°i/Ý]Û#-Wk؃܃sÀ\¹™ßÌü`§ïvâ÷ ÷´¥ÚbR+Ål„̯Ì“\y‚Ìy rðØãÀ¡¤jè|Û,UƒÜ -ž;ix[udl@ ÂÆ¢äQ×(ßózp¬^„g°•åI¡·)Ü‹yFzОS”ä ²“(z[yŠR8Åp°æÊ0ELð!le 2ÞܰD—»EF¤(hÆóï§&Õò<šsÞ ÕcïýñH@ÌSa^I©ÚNR4ÿÊa’ò§+ÕœãWRª JL²ß Ljô]ÛÄoj1%UíwÄùW‚‘Js x–HM{ý!‰ /¶3›‡G´*K¦êÞNZŸf|y9{Dî.Nsļ6ˆÙzšQ Š 4\÷[E|ãh¢P¶endstream endobj 336 0 obj << /Type /Page /Contents 337 0 R /Resources 335 0 R /MediaBox [0 0 612 792] /Parent 308 0 R /Annots [ 339 0 R 340 0 R 341 0 R ] >> endobj 339 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 631.827 113.594 642.952] /Subtype /Link /A << /S /GoTo /D (section.5.8) >> >> endobj 340 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 354.438 113.594 365.563] /Subtype /Link /A << /S /GoTo /D (section.5.7) >> >> endobj 341 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 77.049 113.594 88.174] /Subtype /Link /A << /S /GoTo /D (section.5.6) >> >> endobj 338 0 obj << /D [336 0 R /XYZ 72 744.045 null] >> endobj 126 0 obj << /D [336 0 R /XYZ 72 614.651 null] >> endobj 130 0 obj << /D [336 0 R /XYZ 72 337.261 null] >> endobj 335 0 obj << /Font << /F8 160 0 R /F21 180 0 R /F27 230 0 R /F19 163 0 R /F23 175 0 R >> /ProcSet [ /PDF /Text ] >> endobj 344 0 obj << /Length 1919 /Filter /FlateDecode >> stream xÚµZÛn7}×Wy’€,ÃûER4)Z EZ»}q@‘Ö¶IëJ²ÿ}‡KR˽Þ$ Ä+éxæpîC™L1ü#SE§Šs„¹˜.·<½…wšÿ)ž ]öïäêOW€ùe‚7zúëþl¥µæ ÎÁ¨a¶8CM5œÃµ ͈ÁA<Æ—›÷Ôn'K(½ …ߥŒL4RyDÒÀ5À²ú­:–ý„5"§) :ªâ °w%Þ†Îfýц’MGA òJ7ªÄ, e/q²JK >Éþºòçd‘°~ùƒ ƒYë0ahhBcã™ß<ÀqwË:eà°x¶ö?Cº AOéfß߬?À«ýbÿ4×|Ñ 1×»µú¬—6l‡öÂmß&3—®åÁ½³«ŽîÆ‚ªY¹_½Ù‡§]aÙO £‘„jüt‘ ‚šYŽû:Ù«‡Ã¦f”Êz.¡‰á|ÖG˜TPHSš4›½¶Ýª¡1‰™ÕMÌx ›(Ä¥cûÁþÖ#þˆÀ>^ s¤N´ 7çªþA‘€Œ$ T‡Éª#@\SÝÒgËÆPJ0ƒ˜R±Î/O /+ÏÈhq³)a ×Ë;eê©»e‘¤':¯¿#Òù¢·×Ã]lå|á1Y}úÈÍ_PJºþÿò‰ÇËÊs£)h`1·õn}LúƒjЍéÎ3h tÎ=µFÁ/¬3&«Ža0™!cœÁ¬møY|áEå™QHYÕËûÅòã ˜äˆ2Ò×ßé<¡{šíÞ¨iÖ“×ã$'tŒ'8–]ï±+‚¬,7N eM;e÷åò1Lø«˜xuéˆ+]cq׆"&Ìy®1"aékŒ²T«Õ]eG…ã!ѧ™†õ‰æGÇ“êÓò—9ͧˌ®êþ0i/±„t÷¯WÍeEµóËKµwol«}éžî*k·åTî­Ö¶VwbW±G?žÚW ;Bï£â;6˜¤=dÄíGNc¸ýèj\ê fœý†®üE€åö#–¼ýˆyÙUýêÚmBß»Có´%ÎDÕËÊS…§M›jqux……îâ¸_ïn{}‚‚by²AV–,U “‹¤]kÖ™‹Û_¹~&ÀL2À=äó.:rÊO]íýZEª ùFú¬"y E˜”…düEGNñ7ºè Ü^!óìEGÀ؃׫C7ß÷såêÅcùé…¿ó€ç½=ùÃáôÎbó°¼+_\ç®B(Ú'dÞ &éù¬Í3§»µyÊ‘›'Åà8“«ßá¿”"ýúíöÅFЀS$§Ì†:Ö–Ú:9G²áõUEØ‹Êã p a5¼æ`[‰iÙ#½æxpŽ@G óëï•ó‚GdUÙdÆd„¨µŠ8‡¼¤,-‘Ö­ØXV»›õí°ü27ÎaóË©o ô‰@{ë ‰V—Œ $§Í¶O¨‚#|ÍIIÏá„ *KÌn41­U¹iõôîjC•DÚ/6*Zlè¸Å†H‚$9Ó÷³‘°ôb@§ÃeÂ8ÈÎaRm @>c±Éi>-6]ÕýaÅš?)mÊcØgv~9-6–Mµo¦˜h¿¹©ol·aÉsü’ã6œÔvc w‘¼-HÊ”1bµÉ¨ ›MGÝ@cTºùCˆô·ºu–µ¦‘•Üj"R!?ŸÝ0FR©s0 ¢rL)fuØELG­ ŠÚïh4çCn«ÿê&þà”Y’endstream endobj 343 0 obj << /Type /Page /Contents 344 0 R /Resources 342 0 R /MediaBox [0 0 612 792] /Parent 353 0 R /Annots [ 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R ] >> endobj 346 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 445.625 113.594 456.75] /Subtype /Link /A << /S /GoTo /D (section.5.7) >> >> endobj 347 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.131 445.625 195.815 456.75] /Subtype /Link /A << /S /GoTo /D (section.5.5) >> >> endobj 348 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [281.274 445.625 298.957 456.75] /Subtype /Link /A << /S /GoTo /D (section.5.6) >> >> endobj 349 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.495 445.625 381.178 456.75] /Subtype /Link /A << /S /GoTo /D (section.5.8) >> >> endobj 350 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 198.879 118.824 210.004] /Subtype /Link /A << /S /GoTo /D (section.5.11) >> >> endobj 351 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.283 198.879 221.967 210.004] /Subtype /Link /A << /S /GoTo /D (section.5.3) >> >> endobj 352 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [296.965 198.879 319.879 210.004] /Subtype /Link /A << /S /GoTo /D (section.5.12) >> >> endobj 345 0 obj << /D [343 0 R /XYZ 72 744.045 null] >> endobj 134 0 obj << /D [343 0 R /XYZ 72 717.466 null] >> endobj 138 0 obj << /D [343 0 R /XYZ 72 431.736 null] >> endobj 142 0 obj << /D [343 0 R /XYZ 72 184.99 null] >> endobj 342 0 obj << /Font << /F21 180 0 R /F8 160 0 R /F23 175 0 R /F19 163 0 R /F27 230 0 R >> /ProcSet [ /PDF /Text ] >> endobj 356 0 obj << /Length 716 /Filter /FlateDecode >> stream xÚ­VMOÛ@½ûW¬8­%¼ìÎ~«§~@%$$ Š*”ˆê$4´?¿³ö:qìdÅqÈÆû2ïÍ{“!‚püıJ1®4Ï2Nžñé÷LÄ[N ɼ«ïþd÷œLs™q¦¼#ñÌ(Of™’ÏUv›ýØV( °Š3nB‘/£ììÂϼ‘dôÔ¥Mî)˜üatyvbÞ3i,V ˆ¯¹ /¯ër™ÒIªY^8¯éõ]^zÕ<¼BÐ@'›ª ϽȽ¥›ùx= ÀżAÞ„7åS¹,çã2pg磭vÍUÊœBIƒæà_µ‚ƒc-à–i.·t;´š9Ä´Ðæ·r5^bµØ×õõöÄ i8E:…ä-fÀÞIÀcÜã@É´¿;ÌQƒ#d7ø ùL®V‹¡Éè0InÐ8uÈ-,3B5p±|Žˆ›8ba¸b¦3 (l0¬„jŒz  8Ò)u ³“ä “ÄµÛ# anN\¦£m°1åvcâFÉ3*]|×Û™m­´6e™UfO[;KaXNû kÖï»r4ŽÔÐ/Ù"ÌÀ™·É8"$;µ\¼' æè #–J+Ó·çþœŒó§éóá$¼ÅOŠ÷&Ñi½’MªÏ,qS É(ZL’O ‡Ã{²øß_Iñ!a´µÒÚ”dÚìOåïiU…,úâðˆ\ÞêõšîÅq{ðKendstream endobj 355 0 obj << /Type /Page /Contents 356 0 R /Resources 354 0 R /MediaBox [0 0 612 792] /Parent 353 0 R /Annots [ 358 0 R 359 0 R 360 0 R ] >> endobj 358 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 601.419 118.824 612.544] /Subtype /Link /A << /S /GoTo /D (section.5.12) >> >> endobj 359 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.283 601.419 221.967 612.544] /Subtype /Link /A << /S /GoTo /D (section.5.3) >> >> endobj 360 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [296.965 601.419 314.648 612.544] /Subtype /Link /A << /S /GoTo /D (section.5.4) >> >> endobj 357 0 obj << /D [355 0 R /XYZ 72 744.045 null] >> endobj 354 0 obj << /Font << /F8 160 0 R /F21 180 0 R /F27 230 0 R /F19 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 363 0 obj << /Length 708 /Filter /FlateDecode >> stream xÚ…UÛn£0}ÏWðh¤…›pÙ·½K«VªÔ¨/«ÕÊP#0iû÷;c;iÚÆYEŠí93gŽg<"ö"øÅ^F½,IÂ(Y{e¿Š¼X®b‹&ŒÂzÖQâg‘_6«?(óh¦)ó652§”…ù:ö6Õoòµá£òƒ˜ˆÉX–’Ôÿ³ùeb’0Ë3Œ‰€¸“„ê[ ž1©–·0uÿ ûÞóVƒŽÝŒØšÜðÒg”ìÛa‡ÜÈÆ@`fؾ¶réÅ€ñ "9þµÈ15¹W„…ÑZò° ký¹S ¸Ée×  |ðiNží o&'«“2‚’%:<"t ΄Ü=ÜšM DQ¬1™Ñ£-¡¤ÂÖ­ªEÎa6Ÿ„ÙŒ`tªC[P3C½=“¨pN:ÝpäÞkågdX:ñ A\*›°ëŽUY˜ÒB×EÖ€Ù%R°¶ºFJLx®o!P‘“†kɶ*è¼Õ„Ö? )%•ez¦™ªÐRï@ãÛb÷w°ÕU6š™Ê-¾íeᶔƳ–“U‹ï Æ×0õàrÄ«Íô¾µÄnw¦ÝøøÆ©1ëPjÛ×O¼ú¾9<Í$^‡,½4cq¡_ß«ù{»žæ±ˆµsðBg&2óà §)>è  0ë‚ÊÇCÿ·]#guº “‚Pñ4Êé5˜œÀzb»ÔŽPDK9(ñä"ß uÝa׿ÿ1@ 9:é'Qw›ÅPÍíΩÚJÉ+e›¯¥ŵ“Oîš:»Ñ†w®V)>ïgGؾ=í×P?ð8°ñ Ö—ÜY^UW*ǧ²)e%÷'¹ŽP(L‹óëh¶Tmýì—aäåÞÙÌ¡º0¹kæIrñëhðëI<û²Ðœ…Q\ 0 ÍÞ&Àìû ÿ&â/endstream endobj 362 0 obj << /Type /Page /Contents 363 0 R /Resources 361 0 R /MediaBox [0 0 612 792] /Parent 353 0 R >> endobj 364 0 obj << /D [362 0 R /XYZ 72 744.045 null] >> endobj 146 0 obj << /D [362 0 R /XYZ 72 717.466 null] >> endobj 361 0 obj << /Font << /F23 175 0 R /F8 160 0 R /F27 230 0 R >> /ProcSet [ /PDF /Text ] >> endobj 367 0 obj << /Length 821 /Filter /FlateDecode >> stream xÚ…VKs›0¾ó+8ÂL¡ „c'm3M›Æž^2™Œ 2¡ a×ýõ]IŽí¤ˆŒ–öûö©ÝµC;€Oh'ÈN0öÛymv ÒOV¸GÛ‹ü,UØoëþ!° à\[³ÔÞÂ9ðÎìÚÂÚŸ™µ°~,xàÀKpà3iä|i}¼JíÌÏf‘½\Ÿº_÷J݇åõÇ+)á ù³ƒ5ɸxrC‡t‚º^èp׋RäÌ|×K³Ø¹i᎜b`T‘³ØÕn:+¸…NˤJ¯‘¯ÒJîû¹’â¦Ôò¹6‘5m$*ˆPxÛÈÀ¬Ëå!±8ÀS•ó$îTæ(±SÈk¦ò c?‰fv$~D*»nS?ršo¤3YüA¡PGògT5•èiS`ú§¨Þ‰ª0:ä´y­ˆ`ß‘mcP\Î+Ê hIEÕô¦€V91b iŽ¶ì«¿Ô€ýj«¦äíÐ’a›ÿÑ£vnkÒ›Š/èæQÂêÞã€-“—ª”Ãc5dŨž„“Yñp¤ÆC‰¥‰R[TÐȵìPy`„³›bçtq;B‹œ…8tÖ-cpk]”8Ûªc©[8þ¼Ñg£Ì\áý‹Ù\ƒù~öˆ š,'*FáG_7©³IUÐB ˜Bí4á4°…÷•¨ñŽÊFb„)>rVƒÐèG-)\MLuX\½CY#†2UŸZí ¨:Ê`¢H§Ávú¢¢×/Ÿä†þI:‰ð±4@*tXo*TXZ²4þÛ%ë Ãk¥q4¶#BxZÃñ{û}Ø'Y¨ÈÞ‰=ãJyáÈ Ünê9dN×d`c·'Ü‘­üÒÜ2’Ó‘ÙÙ–ü-|Ð_BÓOz—„Ïm?žñüiÊøj(ÍðDh7]wÅÛѨŒé¢­;6®ü­]ÈxûÿŠ|åþr|óîíÏ)£‚šñ³¢ïÚAÐitÄ6>/ªõî‚49e& %›€Ïk·ó ~ÇÄTtõ¢7ãûV:D{ÉùxfßÑ bY*£á‹¶0u«ì£¶BßQ>ÖkýË÷fÄÈO1[êÏÓ)ðZKŽgendstream endobj 366 0 obj << /Type /Page /Contents 367 0 R /Resources 365 0 R /MediaBox [0 0 612 792] /Parent 353 0 R >> endobj 368 0 obj << /D [366 0 R /XYZ 72 744.045 null] >> endobj 365 0 obj << /Font << /F8 160 0 R /F21 180 0 R /F27 230 0 R >> /ProcSet [ /PDF /Text ] >> endobj 371 0 obj << /Length 530 /Filter /FlateDecode >> stream xÚ•OSâ0Æïý9®ºi(= XÅ„µñàxˆ4…ŒiÃ&)è~zG޸åÃïÉóþm!lJc”bÒGË&Àheÿ½¢Ũ—„ÙpÏþOUVsàdC´³Ï8ŒI†š€$ñáYEðçèгz)Á!8“Qü·( ³A‚Ê‘ÌÆNÒceõø+Î.žÊÛàª<šô1ñeÙs¼w"ØG‰S4´a.LõÃ4 §a'û0‹mS*ºdóá²Õ.¦«7Šmm_y'„—¼a<–]kÎó\ÑUÁÿ§ï™Þ–¼úšù õ¼3›ÎXÍyƒOÉXV Öª¨~Pü‡É¨«k¦~y^¬å.z!…(ß6@ŽŽ­³¡PâŒm` O󣕭a¯Æ;pât&ßeäLÓ=fwÒîƒr¡úÅÙÀt¼æúˆjèÙ³|°švÂ#X0¥¹6¬ªtš™uàÓýЖ ¶šo™zPÜÐgáQå\is¹¥\Àš{F«Ë¶š0ÁŒÇêr“K5mk ¬Ã ÔºjAm€’¹n¨Y®O[e-ä÷„ ±©Á5É9Ôµ k9« s3”a‹œé°âoúJ)ÈÒ~" TtË5ŒíGøZÉxu'ÝÆCïäwH>¡™¶ÞÃn=Ï3×ôü°n§7–½õúq8$äÜ}µ¿+OÁ;ëNïendstream endobj 370 0 obj << /Type /Page /Contents 371 0 R /Resources 369 0 R /MediaBox [0 0 612 792] /Parent 353 0 R >> endobj 372 0 obj << /D [370 0 R /XYZ 72 744.045 null] >> endobj 369 0 obj << /Font << /F8 160 0 R /F27 230 0 R >> /ProcSet [ /PDF /Text ] >> endobj 375 0 obj << /Length 417 /Filter /FlateDecode >> stream xÚ}“ÉNä0†ï~ CŒ·lGèNÏ€è°$ê B(t´ÈÒ83ýöØ K1ŠÙõ•ÿª¿dSHôGaÀ` &ƒÛø¨£}§ºGáÀ^ÀÍ-…Î9‹(„ÿôš`&"XÁÙûº)¸úTpu7߈œdàhÂG>‡Ùô|VÜ NœÛììhÅèW õö©Ðj&cñäP”ïUé¸IÇå!C>vÜ0òкÕ{†Š¾* à(=Ô§è^ï(j+s¤ɹQÙ::ûygÂÍã_ŽÛ¾.CU®Þ6¦1gŸÆ<"~›œk¸;Iœ³†Ú—?ø¢¸`ðÁÝåk´—¹,eê™ùS¦g=¡ê´ÞWóp™ºXÊyx’›Rv»ÑÉO~Ñ«‹‡ë²³H÷û¿m÷½)ñy£R•KKÏÇ•,óâ`3”åݳÕìªí›bžÆÿw²´kz•ÉZÿæù8b­Ÿ–OI7J¬Ó°Ñ,ÞÜ­Çifaiœ,-è:^l,(ù`ӨߎÇp(ÄÜýÞã¼É ý_endstream endobj 374 0 obj << /Type /Page /Contents 375 0 R /Resources 373 0 R /MediaBox [0 0 612 792] /Parent 353 0 R >> endobj 376 0 obj << /D [374 0 R /XYZ 72 744.045 null] >> endobj 373 0 obj << /Font << /F8 160 0 R /F21 180 0 R /F27 230 0 R >> /ProcSet [ /PDF /Text ] >> endobj 377 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/dieresis/visiblespace 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/dieresis 197/.notdef] >> endobj 252 0 obj << /Length1 893 /Length2 2383 /Length3 532 /Length 3007 /Filter /FlateDecode >> stream xÚí’y<”ídz$²K%z(Ùbfì£RŒ5YGc_†yŒaÌŒ™± "Ù¡!Ê– •,YʬY*B$Td­”™¼ï{ÞNçÏsþ:ŸóÜÿ<ßëºîßýû\×%-iRÔÁ’Ü@‘¦W‚kHSkk¸2W‚A¤¥‘CÓˆz¨À8 ã‡”a\]KUMKU" Id:ó¤²H¹ŸE€ŽHÁ»cˆ€)†æ ú°4Ü1Erǃ4º C V?oP+ RüA¬°xwàâðDô§#c¢ Ðø#Œõ#ÿ•ò)T–)@–eR`YÄ’ˆ:€= P3ë-åä¿aêwq?Á ãóS~³Kÿ–Çøà ô?+H>d?HLIXBü½ÔüÜ)ˆÅûùüž5¦axw"ް?Bxª>ÄZàiîžân†A"öw¬¾m:€"-OÙÙ)ü9ÐͤO¤YÓÉÿTýY½Éð¿™Õ >p€)Á`pV!ëüõçôÛcúDwOdm„š:€¡P0tk5X¤Ã< ` Ë0T‰H¢±®¬žœ`kˆ"?O.²“Î8”^C¼Ò}ég¢ëŽ×-õz„Å oxž\lï½øÑ2;Æ÷%¬{'ÿXï¾×|È6)’yîÑ̾/KôÇ·Ozz÷çwÉ<[ËøUðb#{%9Ø ”~‡}fñhªa'£µ†§ÿ ¹[¼—¦¯e¼¾ÇÉXü48ئ'-"•lÌÚúìaã %õ¢lšÿä úщ{¨vm¯Ò{d$ßÉä‰]Uâ];˜"Tf­€o·$Gàn·E:dçœcm·ÐÚÙì6|aÌ5Ù¼RãÑ×Ml½ZšŽÙ ¤8ú_¬Ò—¸î°yÉ w™ “‹«Ïˆt)xiõÆg=&¿ 2æ6*Dk¢»aãæ4µ©á$©@iýXXøFî©ó=17Dê4ÞWZÌé@4#öŽ©u¡yj’×:ÑŸ[lRùv!â­Á5Çk‹ûÒO2h³Š¦üó£§Ï¨% aÿáù¿Àÿ„€;ÄPh$ Åò)¿•endstream endobj 253 0 obj << /Type /Font /Subtype /Type1 /Encoding 377 0 R /FirstChar 97 /LastChar 118 /Widths 378 0 R /BaseFont /CQLXHY+CMTT12 /FontDescriptor 251 0 R >> endobj 251 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /CQLXHY+CMTT12 /ItalicAngle 0 /StemV 65 /XHeight 431 /FontBBox [-1 -234 524 695] /Flags 4 /CharSet (/a/e/h/l/m/o/r/s/t/v) /FontFile 252 0 R >> endobj 378 0 obj [515 0 0 0 515 0 0 515 0 0 0 515 515 0 515 0 0 515 515 515 0 515 ] endobj 379 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/sterling/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis 197/.notdef] >> endobj 249 0 obj << /Length1 859 /Length2 2283 /Length3 532 /Length 2892 /Filter /FlateDecode >> stream xÚíSi<”ýEFÑØ ¯Gb,13Â0–l%kÖäDŒ™ØaÌLFI–ñzcŽmLYcB½(ÉekA¢¤ÅH ‘¥PšèLõn§÷ã9ŸÎï<Ï—çºÿ×ÿº¯ßußšŠ‹»Ž%Žî'):H]$°v²:ìa‡DH]DMÍš b(xÑCÑÒØ XRƒ¤€D¡õ Ñ{ø$ÀšN'ヂ)€†µæW ° Éx,†8a(Á`_‹!î$,¤ÐuKpûz#p#A2 ÄéBH‡ÇR€0O„À¿z²#’Ô÷2Žþû $GòM|“šß"ŽD$Ð;“ø½@¾“ÿ†©Å÷S gLØWùßrú†'Ðã© 8‘p ™ø#Õ ünÏŠDø[#; †€ÇZƒ  ƒÔ×Eè¯ã#÷ã£@œ ž‚ 1„Hð[$â~ôÁOï› ¸‹·³›ƒöƒývì‚Á)ôp@üÉÿ†‘b~Ld|p¡‹@ ùDþûû—ïíö±$žè2C‡ðWˆ €ãHOÄQÅ÷ ×%’(ü+?™ D†|+J€øZú†ŒPÜë„D 8î/ ÀÁ¿@#Nøò—Nú ÔàäoðïñXY‘¢Žëè:z|³z(}e óïDO">‚ ÚÙ…úž–J&ƒDÊ·µäGÿ;Äó§‚Q Â}Bš$†œ©Oúõä¾óÊ7iF*æ\H¼×¨Í1Ñ}a"ùˆÜpßüé=” ÁWlc¿u¸Ç¼Ü^oy¢ó¸;œ1íÜ*­Yœë.2õ9*ØuîN‡DXÁ/¯¹Ê¯Â´ç‡Ty#´–MUŽÓHgûÛÓ}údmñdhlïK®ØYœêâ{®Ù1<45’Þóé-é<‰[Ú%ç“Ë“Zçnïxþ0txkŽqÊ9§  aúS©À\¬º ÈJ挌E3ߟåàÑn9²åb*´É·ª±øAû´¹š`L"Y¤Eû‰bˆ%üËÛ/RUoô*\ïóylœ|™nOT«Æ¤Ûè·ÄÇLuoÉ£õ'ÕÅ4¯òÊ ña{ê …9<™—·üôö@1hV£‘BŹ1Äí{ô‡šjãƒñôs0‘›šÔÖŠ«¹S‚Þë ›p.Yù†¾Ï³Úø¤÷ïòïãpw»)/¹Ö%,ÛKToŒ~á´—­¿EèU÷š(æ*.m6ö¶r‹‘¤ ˆîzªÐ¡Hbg&WwÝÕßøvR%‡±„ØH/ÙÚÎ ü’^Òý¾^Sªqíš¡—Å9ž³œÖv^±â—%fØNOÌ‚0©b)¾ëµËëÏæÝOl!WgsÀ*Q m™{òætºlßs«ô×TMñªg~CáÑBu®¡Â‡Õ§JÚG ËQºÛÚ)5ù‚ž¿V`ó®Ûz¥¢A¦1ÌÉly .gj¡ÃX©<ÈË)¶1ôw¾a°ôÙáJhÜ ŽÀäº?ÞùÜ&Þ®±Ú<ù^ºh÷ël3W1f~g¢£|‹éf©KmUåD‰‘üèÂ;:ØÓùn¥ò¬’çvªUŠv­…‘ÌÆwœb%1²g§Qòí» DRË0Ñ3¹ô§Q“ÃXÙO/+”Ì•mÈOm­×òt¹9®c“Ðî޻ąټš•YÕê#ˆKÈçBÇêdü¡ÒGŽÜðõ›€‘~n#ñS™×N ŽHa–ÕÈ͆&ö);s±Bº£Ûáf^TÂcÁÒ;&°–Dë]˜Û´ž:ä±:gsÉêrítAùózËsÍÔhÑ-}iªK °öÚ™º’ n¯D/ž¬€dUGz_Tº«=Ü+ D]¯ž™lªæ*8¿x¦"Ôb ݰX×§g??zì¤#õ@¡.ŠÿÃ8'Õ† ¾˜ò1îш{´]«K•ÈYú0ÓÀ¼§$0eH®<Å2Ñð&ï(*?]äð´¶syÑz˜>ÀýÂöåt @äsöɺ x†?5;ž®äé$ïEÄ ÇQ¡ýóy£-WëSy×à7(]ošNݸ.·š”6îZJÏ ï˜X*s#×Ð=½›ÕÔüs ]vœñsŠteÓìENÒÄ^©ôíå\gè!… 0T¶¿„g‘³±qþÙl «x!˜®4Üô6¡dVòg¨^ërñˆÏEÆãþÛù2Е#VégŠÖ~T9-eØ\³÷€Í"™´Á¡+°Ò¢>¨Ä[»ä¹J]þœùÄù§ó@œ]“›Í哂϶fÖûgyh—opèÉÂúõÀLôŠ„Œ51_æ´¾,92™]ºƒ†‹ˆŠƒ¥DNsb–§£Ô¯¦øìCF.ÄŽ¶îÉÝb'äºzƒìé·Ã®9_é"/é eœPÁÝ»­›'há Ñ*A,ž“ˆmI¦½h•†îU¼pTå.Å´†+ýR¸Zm8#Èí¬Þw º²cËî3ê‡sì%¥çÄ[Wv)𓫝ls0I"¢^kyy·®ù±Ng¨¤®ýã³ÿ¥G“l²Ò›–,'®´t…Œeª,(ZÚ.¦× Z‰Óï:ÙR2¬}µí,Fó°õ6j :¿R»‚éÕ9“=”êRyÐwTP–ûqÕV½” «~6]+§.ѯLGZ±k¦ËóY=2Uç³||¯ëÙ.¤ _Kë;Z”µÉjr¶û¸3Îñô+1W݉Y³èÛ¡…SqmjQä9'oÉNÞ2žúiÃP¸&[1»CY‹;‡ihu¾qaIàZ÷mf‚¼PÓ"*ÂþR#ÂÍ©_³Ó{ƬGÍÔ ÓîILQf´²67YóMR÷©™WjŸ¤(G#?>K£^ƒ™_ê¡pÑ€4™ÎºUS0~ôiÕXYô7ŸŽ‘œió£»)'Dî4ÍDü‡äÿÿXˆ!SHar(ä_¼³Ýeendstream endobj 250 0 obj << /Type /Font /Subtype /Type1 /Encoding 379 0 R /FirstChar 72 /LastChar 114 /Widths 380 0 R /BaseFont /PYNRKI+CMBXTI10 /FontDescriptor 248 0 R >> endobj 248 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /PYNRKI+CMBXTI10 /ItalicAngle -14 /StemV 107 /XHeight 444 /FontBBox [-29 -250 1274 754] /Flags 4 /CharSet (/H/W/d/e/l/o/r) /FontFile 249 0 R >> endobj 380 0 obj [896 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1160 0 0 0 0 0 0 0 0 0 0 0 0 591 532 0 0 0 0 0 0 297 0 0 591 0 0 502 ] endobj 229 0 obj << /Length1 1895 /Length2 10782 /Length3 532 /Length 11851 /Filter /FlateDecode >> stream xÚí—UXœËúåqww·àîîîî4îî® î!Á%Á5¸Ipww×à–é}öùorÎ\Î\Í3ÍMÿVÕWk½õÖWý@E¦¢Î(jád”rrtgdebåˆ+jhðX™X¨¨Ä]¦î6Nަî@>+//+@Ôà ÀÆ`åâãàâcã@ ˆ;9û¸ÚXY»hÅéþšÄ uºÚ˜›:MÝ­ 5ÌMíêNæ6@w&€¨½=@í¯'Üj@7 «'Ђ •`acî0ZÙ8"0ÿHÖÑÒ Àý·lááü?Cž@W7P(-($ÑÂÉÑÞ`´D`VryAIþo„úïÅ¥<ìí•LþZþ¯Mú߆Mlì}þ=ÁÉÁÙÃè Pt²º:þ÷TmàßÙ6ÿ=*ënjoc.êhe°ü-Ù¸IÙx-TlÜÍ­î®ÀÉ@G‹ÿÎÚ¶%`ÖÕ•–“Qfø»ÿS1µqt×ðqþgÑ¿&ÿ‹Yß´9®6Þ}&VÐDÐßÿ|3ü//IGs' GÐyà䘺ºšú €ˆ8~¬G  7è ÊËÌäèäzÚ’€¥“+Â_Ýdç0»x8¹-Ììÿù[ä0;]ÍŽîo€ÙÔ¤º™‚êý•ƒ4ÓÔèh´|›ËÁúoõïæÿ#³–põÃÆÍîM0wrp0}S8ÌÖ>ÎÖ@Ç7‰ë_lœþpet³7u³~S@ }®No/€ÙÉøs‚º{½sòüemïôæÃ z è`óŸ*¨ ‹‡éÛq*±úëµ­4PlÑ7%{#PXñ7ùJ¼ÈSòâe”z#³ô\eÞˆÀ,ûF ?…7ù)¾ÈOé@~ÊÿÈOå@jorP#P£4ÞT­æܵÞä®ýF ?Ýty1›¹ššÛÝÿãÈð²ÿ£ÿç¡áy€N±«›¹“ë[/AW óÛ‘áUhöF Góˆ•T¢ÅøW7ÿ@PÉ– (‡Õ*Úú…±ùAeÛþ Lv (”ýJåð†¬ TŽ (•ÓJåü‚R¹ü T® (•ÛJåþ‚Ryü Tž (•ׂ~T˜½ÿ@P*Ÿ?”Ê÷üwÏ€ÿÑIV6ÎËÿÙHV6®¿^sw{‹¿;ð¿_›bbNÞ~Œ\F6vv'èÆàâå øÏišŽ6.@Y ÐûÌÂÂÃþ÷µiîá ºoÜÿõ+ºÿ‡-m@·7è 4GXœs2ç·ÍhŒ, ”,œ(ƒ¦³jJTªïžî@ [H·/’w¡_«Óy,ÏÂDÙƒÞ#õz&t{ßî¯:*uâ’˜9ûºçi²—åÛB¨s•¥è³ëL~vŒÚÖ8s} ®<µ6\šª[ÔŸ}1pœ¯B+¡±»BÖ£ïÙÐó)œ‹[G*Ë^3*¢ŽšL -Ó¥4š#jÕ -5ju<,Ð6 ®™aùÒ©Ýã±./åÕìÁæC(›XÎBÓ¸­`T# 똱!Þ€Ž @÷ÂoÏÑñ9™w¾œ¹¹hxÇ£ùäʈD·ËUÂKo)#Ó.OtÒÆhðä:‘dge•EÂyI^rK+-`"—Æma½áH§7wgœ’ŠÎɘ­7uMó”J¹iJÙœóúù½ +»HÌm?ÉòCPε49ê&ëü¬ÂÓû|ZâÖ#·=`ë0)ޤÚÒi#ÿL­\ÖA…S¹ØòÁ’T£¼Ý3º'3løÎó‡$À\ô¤³žø¬›ÝµjúL‘üfÈÛnôŠUp³‹? «ð:ZaÓq ÐUÛ»j×ãèJøÂÀ–—sØ)†C'Ø=2›…•Jýoð‰NH–c,weº{RÙXÓÑžÄ#Ù˜÷DËe¼P/ùg<¾PbQDk ˆ@á÷GÔÑgFÂJEu®»/BwÆïˆ´ÒwÑ5ºñ~ Âø”A·ªi1’&E–ÈÞ6tŸÕ_Y—BéºNWYÐÑÑ0a ¼J0VPKÇœÃÓÙ€•ƒ£ A+¡ÇòOwbˆøFˆx`Œ>íoù2Gj¯­É圫¸lB¬XD(u?…®…ùÝ·ð“Ž{‹W1êt·|þñãKg?ë—J’ÑöO[ùþ¤Þ€m01m½lJ*FGð¯&Üê)ŠÅC=JzS­P¿2ù)¾æ«’ÖÄqóÛìÂÚï°€s7µw—5jc¥÷ ÓNÛî¶acû™Rˆ0Ï»Õ1õÑêv‚{Ч2Ùvºªè·S"'iàéµ/…Ë DmŸiÕ~Ž1¼BÅÐþH°…lD úmÁ@nˆ³éÜ"ÉY¸B1XÅ:Üzµ¿Ç%–:l•hä>3˜…ÐWÌÚ½k¾îßæ¤"p„Sr®û^- Þ¹=/±dëü‹E u¹ÜÏiÊeI?ÐÁõ‘”á>‚I-}5Lru0™]Ì“s/V=çyŽÕèkâ<¿Û‡V@‡Â/þaƒ„¹ã¨©%q˨nvà'«‚§¿ž㔚%+ŒŽ5Ã9MãEŸ‹íÆÕ€kÈ”0Ô=¹áüUÝ™?q›âf1TádP¢hí!ÏãtL%oÕÂì*A¡ò ›Qö› ¥_Jy ^Ÿ%ü^€bŸÈ£6^­ ÿ*¼Õu€m‚+KLM—[Yá„•|˜³ôƒÏH‰³:*#6Ó²ý?ðÏÄÅ—HNØFpI{L!–vÛš³šOrLë®y e[×ò·Ù·ý‚ÈŒf2³ˆÈîl¬jóت8WZjÏ\/A]NæQ¢–æñúÆ¥BÊ.ÍÌ…ücûæ´È³;PXŠbÁJÛÒ ¹2Û“ü#Ô8XdRXžbœfš±.¦¡ËûÍ–ÊžöB¤ÓŸ}u¼|S’t,ô÷ZF#lÈØ"›ªb­ŒnÚðÞãÅ`à ãÌ…Bi!ÙGÖ÷³=…‰ÑSÐKUÁMqhRë[ÆÂGÔ0 ñ |rЬüxËTÐ{æ5%4tl;ÓX˦ §¡‘`E‰à…Õß³é‡É°Vø“ãi /Wì½Cf¦hÚŽE¯ã¢÷J³´U%9´~˜ÊË$´Äg¿ôèØ¹¸‘.}¤û@ï‚KVÍ22m«’‚"_ŠÎ+*Ä—ÙLàkVÖ›ì†Uqy=iÀ»oåæÊ̇#A™³ÎhëwÁ‹½ÇûÞ\`.‰Úâ'愆τ­¼RÙ‰öÄâ~T„œ³ ·ØOÏò×J \æ ŠQßl­€ÐuÅÄ”%ìRãxúÚé˜äw…D©¥ s½ ¶§äm™;ÚBˆžžü¶ºzÁMøëCï}Q!úLò#’ªKêf³ï21C©«_ÁÃÊEÌÑBâr“8dvˆ![Õ}ßCè\9Ò0<V"löv¾fN«…Ü^«h8âc'ïïU&B2ݯmäbgú`¿¥*@F‚ü*"äæ“#®ôd>²½`«o#\É ÏEga¥Ö¨Úè1£ï¹á(ÕN4³èÁ —–#÷;á’#?6G•„çï¼§œqH9qû ½õ”=þàüC=GÔ“»tïuöB·†¯Š¹„zäsê+ò7>ï6KÂ+4+Ëg8­$ÀXfûñUûçÖTõÅb¦­L^üvo^V.h£ÀB •üyò­ÑdÜ[3ö ™"ªWÎüò”PÚð”–e¦.̬ª"™â¦iÍó¹J€~ä N¿ôH«’ÝBû&»ÚZØ«aU×iHó Z´Od7$]P%[h«²G3¯Á§4éÓ:àEuÌ Z낌LŠÿþ…@5\ àº ûÁ Œ¢·y~‚rä4‡Ð,\R<ÒûÕ8Ù0ßúcép×[agÈL˜Å$‹Ç2µÛ³œÈȳëçЃMc±¥MÚ&”áÜÊüÈh8MðÖMúÃêåVmúxè/f¨A#?ä²?árÝ}É­:ƒƒÝ¼q‚Ù;ȶI“Åé2"_l¿'/»(j&*(TÉujúbD?zåäUxƒ¦[óÃ#(ªÄÏEQíF£}]mqÔoá)œ S¤”nj½½Š€o)3s×üi?–LêábX²pžÇîÞÕzÿÞ“ Šâ×tK=B ô8Úê+l±wr=Rj3fɨ'¡i“5» FóáOkh­z–Râ¹”þ½¨ù*EX‘û¦Å’» ć¾döéq™VJ¨Á‚õ–kØkø©Z¶8ТH'&÷,Ìq€§]&Üéz×6“tÿu³d]óf•ož d±¨Øæ¨š ÇEgbfþQ,sq?0›?{ úz¬œÃIFÂÁ2Ì0è+§þž¼„³Dg|¼5,ù¬#—¢ZS@_†| éK¼Ž-6€ ^ä‚K`ßΤ¸¡¶ßd=3‚ÔW²2:uµq¾A…g•Ù7Äs‰Ì 0²T—éÆAÜôo»t¨ÆÿvŸPÖÖ÷’ÅÍÚ\…ÐÊ>oac<ŠSHÑQúeyê JÅ¡îR¥š‹S ~¨?ZؤøùÓÞgZ†P<3MÛ=jü/‹œ ăìÛ÷ÞVZZ•§ˆãzÚ;Rp’$–ÚB9¿­Ä‘œ—ãgì¼K{¤n»Ìºí%‹ø}1'SÖJM¥¸Ä÷]K§ÎûçÃ!ìC¨WZ/bkqD‘üWID3̦ĥ½¸!ܨ׋×:4NWÓ÷óŸ=ár¶"Žöæ÷ª]åŠgWùÐCfåäðô¦êý ×HuÌyiЏáÏW¬lŽèp A|å„þŒ)¿o²d¨YŸ!nWÈìÜ„êE{߃p†F׉‹VMÕÆ‰Ds-T餺þÝùªYöÉÖW9®Z­üšuB\U’=aµPR­º¸;æ6šaå¼ îVýøO;âÊë0J™S|–g3ZöïוðB*6îðˆn†€´À†,¥+OÙîÅ’˜J‹B²²@(‹Oö.J°jÄäËý¤i\àM¯ ¾ÚJ V]w)i™â'Âî—ø} âèÙ°€ÅYc¯”9Ä¥è}¹F1›¦HA›'vðdØuÈ`®w…ªìxîõ‘þÈ ¡Öø1Å^Pm¹þŠOšŠ®îÁw`ÊÞA¹QÐëföd·¸ïÉ$áUUÚÔèeÜƒŠ¨ê^êÐì"‰Àœ*¿½¹‚^û&´ó2mO*4mVÜËlpXiá«‘álõÏ¡w -èÛI“=lŸXŠ$ sÑê¿ô bbÏô‹çKòXÄT‡A)A¦_””'pVòþÒ×j³¶<éãç%–ù¼ÄÑ´„y2oU]ÆL[x{uLòB …᩺–=TáKÑJY§®+€ãEÙ(­¬¯áå#ËÉ-ä?!éRÅך¨"aöµŽ·^¬«5n´"©öé M 'â©$‹¾‰Égû…Œàw½\‡œÞ„p¨pF¸®[È0ZæøÀá+":©æt+—ây¸ º‘=ü¾o[ÂL1€Ï˜Àã>dN0ÍèÅ8rãrf×M‹_KÖ·BrÇz%{Ë-xB?ýrz“JÔðdD~|Éö”„«øþ »4%ÒáŒÌYØ6Mqt §ªðÜôµK° €?1²Ž6öÒÔ„á:64,D²œLŒ©ìõßÖfz"†*€¨mæ(¹ÑœÒrÈbw²¡'Sºnx2¯Ê 'W¿UŠxˆÙÄ!r4ë!þÙ|Ð%HÀ‘ØA¤µ‘Sïßrsåˆnb‘Áv× ¬E†Â‡“ßYëÊ oA J-THfÏSûʩĵïÙ!P0p.èÖòŒªblT lÅç[^ßk´ñÿI:ýHÇÀu‹¡+IÊú_EŒ÷ðñàÝs—Yg*öìÔÈ8r^QyÏÞàc?“<7НÖMyÇÇ+v‹{¡a/Iè­jN¶:Kiê„7Ÿ_¸º]ý+àlúއ¢W#ôSƒMqw´žç VEEí/_z⩦ž¬Ï|—Jv¥´=œŽ›z]äMU36e8<†Tcô£žãý}a]3t­'ã°'+*=!O埳–ð'|Š¿Ç"@ð×½þòëy~®' $FÀ(ÌÈúø<×¾Æäxz¢zÕmÎè}|´e9d ÏÀÓ 1xE^¡…w|÷¤ñ*æ`¼âÓwÊOŸdÖ C·#Ⱥ?%ÕSfÇFŠDýVE*©ŽoŠçÜך›c™£¾7ƒs`;qñÔZÃcc+T¸éOesÄ’”VÂI”ãcë@§êghÇ«£!{Ïd”|İŸõΠîÎ Å 6’lçÅ<&8Ïò®Ÿb0Ø䎜6•œýø/®—NA¿«z…DÛD[õ£cYxR€k­?@bcE{@äùè”Iõé^0¾%ò3ù–»€ÒI¬=Û÷Ö.DE5DYz#ÖØRô§2µ&©óÙºzõ¬Tí>®šÉ»Z·¿ЩÒõZ·[HX££‡#~4„7ú°'Âl4›לÌB¾'àà¢áþqM"À“úõGøo§ùöµ~G’Uoðûüˆ¹ú*‡¡^¯J ²êïS‡Ü…¡ ¥Ü×Á³!ôŠ™_ýÊ‚11…éPÕ¶iꦰØ?ÅÚ”“~|¿°úÉ,\†{yÏ‚QzÜ"5ËÄåÖÒHMè>M ½Zm ˆ4‡®÷û9ÓX^Ò5Øú51ò£Î}NÖ£ Ô’‡¥2e¤™¤~Ý-.sŠı!æm¨\ ÙGxNãh8ö¬a.Af›¦¹? 7Ru ¾C%ãgi‹ Ûr R‰%{æŒYh `'(X°º¯Ë}d„’ÆXçØìµKðåÚäú¶5…ÑÓÛ—‹PúÙ©wWµÿéy­2øyvÏúñ œ·›¥9:ÈÆÃ¸1°¼æ†ÁÒqU7™ºƒ»¼>ˆÂ눦ËSÊ̵*ø^˜"œ¹Ó üSd•§óV-å öbQ±Üô\a"pç\a¨œ_ØkÁ;_ó,‹&îp…ZcWíW¬^X8ç"ÝvÞó[–QWßWp9BôiX)lQlœ¸Þ¦Š¸L¦J¯Ütº_<Û¸ÏÜ<ñ°Iê•vmáHÜÇØde¢¾TÄØ&»+xn]¯H¯ ~”/Ê蜧› mÛ]›]—Ÿ¿ð£7€÷D¢fጤTç¢ÂØtTaÏmkË GX¡Í'λ–ƒeÛ3¥6ÄÖ<¿?ýõ¯š.­Éý©8Cg_Z.vfaÊù‘îØK0Qè`ƒš9Í ü¶,yÞI/‹uÇšãJ¥ÑSÔ~áƒ$acqä¼ú½ß‹ K›G¿žØŽo›€¥YCûnK`I!•Ì Cý¼¾eû*cù4wØê4žc°ªñ|j®õ@^èìŒÅÏ1ò³H²kïu“»zJšöyl‡g í‘Ð5œ¹Àœ¸7"4±C½ 9:‹Ð€Ýņ¡m¶iì·…šðÝB› vDº¾|,O½B–#¢ð‚­B•ôiñfáR©“ðj¬ÒÁdÏ;h‘nœX‹ßa| ?«¬N¨¥äWz­bïUíll(¯ØoЭ`u›´ïâÓ .¬Bò6™Ùt*áº"§ßш}¤D„0“º”£ê.ú™gí‚_;I7ž“þhÛ‡9p¾"ÜêÉC’lÑÝ&—°¦Y០ô­žMRÖX]”­Îù÷A}qâêcžÍ"CDP’ÌáF(§9+‚ØKúwZ°v0°KM:c÷L>HšX Ùè/ ã/?®¦§xäFõ–Ãj”¨ÔÃ¥ºÏ‚¸Dz E¥•P{ ìÉ5[Ýp¢³ð¯ /¨=hwíöj‹€–ƒŒ[HÂyýƒä˯‘ÚáTZŠšœ«2z‘±¤õVó%·'ÂOQÚæ?:D93únB׉¨èâî_˜{ZÀFûíÃývôÔ¬lÃÐ åÁ‹Cj6)ñ+vn/~Û°~”óíµÝúqœ˜©ëµðœüîÙ_ ·U…?+S›3 щÛ+"ó)$â’;ö´±bO§›êŒ›ª“Ó«t»…šË]Üq1æÖ+ r -éÓ‹_«¶êÆÒWDÎ_Œž¹VL:ûä>¦]ù/ïSkB­èqÝÇÀf¥¤†|×¹wŠÈ:ªúˆ"yå¯îJ0™R%ŶZ—BCÝžhÝûËø›C:*ÊyPGÄU;uMë¿I› ëû’Ñ~ùb)V>IJ/¦©Îê×92I¨4ErÖŸîÔœ̽ýÖ7U ç`è¿"v&µ˜jô¡…6ó >ì‚eàáªX´ÙJ.¸á\²ìèq±œ*>Y#êSÏjH?Ë,ù@\¸qXÊó…âéHŠvJäA‚œ*jk“b`úÓ—ßâ^uHšŸ¬ ­í™xòØ!ï"·‘û{¼áó¢ßG¿¬U))®ÎÌl‰Ñ ’X¿ÎÕº:Ÿž‡—ñwŸÅͨ0M*Ö¦<:Á/7{oƒ3µiü8–æpÝOݯ¤z<_WM¿s’(‰s2髆™ÏúÌ[Ç6œ öõåÀþ¢xu&&[Ž @sÞ_Kt²¢uÌ5 XáÝ×eâ«ðK¡4Ï>ÿ­F÷3ßOÁ<žô¶—v4Ћ|ÈÝ—[͹ÕÎì ªsZꬒ,äÕK@ø4EÞw§¢µyøðÙãcTü]œP3’˜Ê€œ¡%ãó`ev {ß…B£[‚ýM <øÒ~Sl ’ËÙ —û9вͺBbḚ̀}ˆ2 «Ä¸éвÇÛ æxð·3ËgÆ8êRÞℚ1X±”¦úñXD˜vú˜×ôÒãgc‹ã؉™\‰ŒG”©¬Nu«KnKXÈÈ !ÕºÜF.0¶ó> ¬‘ò3(ÃÔ^§‹—™ú(Vñœ;Œ½§¡¼_ü‘Óψ˄‰üíÃ$K+Ù§´KGFkI,!êà]äî+ë«A ÁÈ’ù1‘ãíSšÉ–Þã@bÚe´ŠJöB-K¢ ä©‹iC^™7ä5’TªKäàç´Ø<7â€Bƒ#ºR_3KŽî‰/CB²g"·žOÒhCeî/wñçÉÓ,}Ê'ÈÈFjn–ÇÔ 5™\U¿åéYaú'ä{M¢^“Žša?‹VŽï÷êöIåì•}žŠŠ¹‡’ðØÑ&–Ž,}±BÍ×€§õÀ®——Ú¯îÝv™eðÂùTÇξǰ–³vy2Üïˆ7 úBå¥ÄmGöÝ¡ø²ÅºUÁLhpNcxƒÑ6‹l« o<¾C^_5x|6*Œ:^iÈÝÒR“kEóG¥çÜÉc\ªYÚ[™&P÷ƒK9Úöÿ^C¼Ëòh íx³â¨ÄÎ?Kyƒ¥Ëk¥ñhÚðNåüåklã—‰ÈÑm2©ŠO¼[¶«Mõ]Ç«UÌÌ™tÀDÅ1Cp‚‰^„AÑ^˜ü™o!yŒk¼5) =I-'ß¾Âe §›K¹0‘//.߸=n)Õ„9ÛRÀÈPSú·œ8:O—ó•Uµö¡j§Â.-ózH£YŽ!è¿RHTÉ•ÕhÇã~ÛATv¢áÓ®öoé}’ É $­@÷Y™ÜP¾sÚ¥ªÚVüR¢Y•ië© æk×´`¹œÛ’„:è`œfèÌçžçPt‡ìù­‘ß-:n÷^pjŽg† ü–]Ç@S4·-ZÂÏFÙ’w'%g—ìãÏ%ù!)Î#R²;_‘,íÔÞµ«Hh0—±5CF™ÑÃ@¶W»;V.Û21 IEqޱÅЗ§n;*ݘÊË,¡–-ÎuÖ÷7u±ÎÄžLgñ¥”5ü€-îòP™ûÅä\üÊЮòÍ$Èy\Xc‹˜ûD_¹Ð‡¥ùK6\n)¨m€eØîuLT·l–qGƒËL|TŒ&ÇŠk.±ç’ÚÄ…C0d„,ŠØàÁqõŒúaáüdËw)–šŽç•îòù%ŠÅ$SÛ·æTÜ¡dØ;ä[ö ÉîAÇMõ ¨gÂw7чMªÔf×ïáN»¦p点¶êÓûô^˜Ÿâ­¯˜ã÷'OÕôJ÷±Äiz„›³#F/˜%òÛ]N¥ºƒ6O)=É‘ò·˜M0¥V9°c:5ðÄg»¾”C“ÄU^qÁNx@àlŸ³\}Ù)ºÅ¯š:#ô úhø;îÒäõæ®’Àµƒ¶¯. ¥Ÿ-×Xšé)Gv°zz®^¶W×à£+f€À4!ítÙ‘qÒ¹|GÒ(oFE¸ûÏBƒ€ÝÏC™´rÍzH·Ä&‘_ǨUíÏÃ\« Ž¡<;Ue¦¾dˆÛ4C sÐÀ4’åÃê=™©ÈÀà‰žÒ¡@Y/¢Š¿;âfÕöÌÑ0ëdSû‘–ºÖu2“6x†+„n"»Cfþµ´°@ˆ"gí<]¿g%Ƚ”IäS ›6Þ·ãhDÊVÃâ²ã ¾ëwãƒåe/õàålŒA´pé>–)£BÚüU/$¤txÄòû¬Ÿ…«O3¸¸HF~ºOR"a PHVÃ~Äšî]Õ³,ÍË€\ñ¸$’®ÙjÄdž® )TPo&o1œ[¤jZåí°²”×¼ »ÕŸý)l)9Çø±>ïGÀ·ßù¹°Rõª, u“ñ¨ˆžðÛÝœçHhþdÄñ‹¢x÷˜]4G/ûÃçwg‚v¯¦#Ä묩hGjÐË­Ššz9øW³4BÐʾp ݃î-­n›P•òz¤lt¨¢ tœ˜G¥,c¿Ÿò¶¥;$ìÂîJ€‡{™#¿¦rÈz&­W‡íyK÷Áï˜1òººBìÇÚ—EÁ¹–h»\!¢Y …-¹d[8êÌj¡º> å£a+×^µÈm`«§síPÓ&TªAäüxÙñHZ*fsû`” ‡ö.ôŒ|Óâ*‹´nßA½8Êžx­ wž-&Ê\ã·¬Q¦cÂ}-vÜP¶×²0’Öùh>¢bªe£ç,!Ô©%ÊDO..©7¢'ë&K¶ùÒ¦›À£á÷LÝ sÒq+0…–h©,õÐÇD˵”eŒ&qL‚þ¬´¸X*®pM{„”dåœ_þRßFïÉf¥>ËZ¤­ø¦媿F=ß½âÓX‹8§à-/Ü0=<øu)Ê}»¬v‰àra8sž¸;ž6Nû˜£ø¡A!!ùÐØŽÙ 'VM¥GÂrWÔâ¶X(zßA.§\að3Íc%ÎÃ4<êÇùà-Ùoá>§D¹¬Ä!´[—ªòn_–¿S̱컥@ò‰Ã•gÖÃáþLDü(1ãßÙ‚PŽËl©?нçoÕdçH<“t؈ÓC÷B “o¤íªOh[2 öØŸUv1ýêI)Š8è­ÒÕ™|•òÅ=m‘ Gc4̶›Âl î¶÷m߬\mQú»—¹Ù©È#´£4ÿ€m{UºqX³ÌÄšdSÿ—üÏ ¸uO™YŠNfÓQŽ^ÒXšìŒ£LÀ\ØÌ΂aŠÙ"Ôû½‚È­‚àÉÇ%UãUUº[ž“ª2,oj‘AÂ9â²Ö°#˜·¿d…‡¢~½fFöŒ%ƒ§0œ|…¬Þ´ìºññ{mÑòr‘s†ÎGîÖ¹C){ÈvcM'fçÊ*âˆnžZ:õœ©þ°vgKa¦erMü¹¬{¢#ÏÝË”Ó]é«ä0²@e6™hâïM×mãÍ *Cåôc?~ž¬’sqÞ¨i¬Ô;2aæ7è~¢ÞRÇG}Ž“ty…}“úý57±Óð«\œ©32'•¶ÍÇÍ<Ô™.¯†×ƒªÐåEùŒãîöÏ­ÞdÝ·°GøU°ÊÆÆÍ9e¸í û·µ| ÞÒZD ùkPGH„Qr•ï#ñÂ0è馱¼Ä×÷­æ¹|?Có,&.d© »Ö„i‘$)Úä’­ÝÖFæáÌ^›^£=’|ötÜZ™ãËñ…$ÆNGýa€‰®8S¸]9¼M¯Cc ñ!âîaã……ñÖ&¢š¸®ê› 3ÔýR1\Á/ˆ(þ$Ù½pµy9‰½ øëVšŠinRVþè§\è8MâlÖ]\ä(*‡Ì~½ëd›‚2ɵü}0¿7ÆaÓå0ÍôŲµçÜ"gàË^jÁ¦#»’s½ŠhÆÑ÷yá7ªÄ ~)|ñg»i¨—‹n™Ë§%´U 2_}m^?¿²g)w«8ê6«¹1Ý#€91hx¢›âèc`2iÏXÈ¿Ž€/°?Àä˜ü>—,Ò¢@¶4Îxý‘¡§ó[°•œ¤Ëê LÄמ ´ß!Œ‡çTŠ!Ç4›÷VzL›çìÉʉùM:ìaɘµh8™«:m¬37î¡«C‹¿|¬V܇=7S~8b%kO2O „Bìüw×G'èxØâQwrWÝzÛ¨~äâàȲåî=îŒNÊàM4ñ3„¢Àˆ*ÍšJŒ„UúÁ¸UØó…¡i+°žÕFÅF¿Å&®šÚdIóŽwNA>im”k&~Ö íU%™öü¢=ƒ{âÌÿb¥ôÈÃI¤Ãº_çæŽ7s¨‡µ 7¥2๦µ';a9ÝÚ|^œÖ÷Ã¥=ó^2ýZÙͤ¸óX>â{½™Ñ:M›Àµ5.úgÝkIÉDf‹.ä…öÔת QþÃGœítÉ•VÔ3·Û“VxN‚Ç£`¹ÇÅÑ¥à¯÷Š'ï ÇyÎÙ¼:û¹žL#ªÂLßꢌýÂÝ­å"´@ØŠFöÕÁÚx—·NÓ¶Czs'li|–dÑ…¯Ÿ×ë»ìâ™?¢Vó‚'O£±Ð̘¤îs·JÝüä-à k*åÅýÛjŒ•›àÛΪ3ZêÄN³íM`¬U×»ð‚ÒÎànB}×Îz.þ"òú†H›Ëy6ïkñl…8t•¯(´OŸ'ÊòüI?Þ9È}Bª#¥e)Z<Í„cÆ?sá6"¥€ÿ&œô¡É Çuˆww} ‘«â}÷ÏTJ¨©ö¯!ó] SQ(Àn–\Åð“2ퟂ"úQtLp)O Û>¬Þ«†Û(XHÆÖgþ@#{Šò½ì’Ò”¢±­œ³¹ð±E‘Yú×&÷“à ýHØ«%µXá…ÀSõ5…1›ï‰©È$I_QUÙúÔöÎGêÓh¿ÐS Jõ©Ûtß™I+b3Ài) û®v¢l‹¶EÆf…$©Ã ~E9éÑK`Ûk¹tnaÓÜd¢a Ù·ó`¥{Té_U#î×Gl‹Gp)f=ˆ‹lêˆwuÓFñ'Œ!Ãi¦c[gâÀÉÈjň™ÛTñÒ=Ø•—Žø´‘à—òEI4à`QÅ#È3(ðÚ)²«™¶(õ=Œцà»mèŽ`ª>t3Åk*žçÚ¹Éç\ô‚ww4Èr ågˆKªþ«‘†_‘³ 8MJ&Ìö/“G[S6ŸMâŒý2jO;ÜEëíÇÚÍQEò¿ µrR¥¯$C¹Ë4¾r mמ_ý £¶`úv‚Pr½£÷ é2´Í‰µÓºlÌÜ…Å0ïôNÍhéa{ÁrȈ;½Ó"þ>ÝNŒ±É0ˆÜ80o2õçU#ÉÂk¾”‡²/rω+-[uôS¸ÏPõJód%y.âTºo$ÃéB¡ ÞõµÃJõÞæýOuü¾vqßáï•/†øôŸ›(f‹U,ÿ‡„ÿ¿Àÿ ˜ÛM]ÝL]íþgkeendstream endobj 230 0 obj << /Type /Font /Subtype /Type1 /Encoding 377 0 R /FirstChar 34 /LastChar 126 /Widths 381 0 R /BaseFont /YYGJHO+CMTT9 /FontDescriptor 228 0 R >> endobj 228 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /YYGJHO+CMTT9 /ItalicAngle 0 /StemV 74 /XHeight 431 /FontBBox [-6 -233 542 698] /Flags 4 /CharSet (/quotedbl/percent/ampersand/parenleft/parenright/asterisk/comma/hyphen/period/slash/zero/one/two/colon/semicolon/equal/greater/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/Y/bracketleft/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/braceright/asciitilde) /FontFile 229 0 R >> endobj 381 0 obj [525 0 0 525 525 0 525 525 525 0 525 525 525 525 525 525 525 0 0 0 0 0 0 0 525 525 0 525 525 0 0 525 525 525 525 525 525 525 525 525 0 0 525 525 525 525 525 0 525 525 525 525 525 525 0 525 0 525 0 525 0 525 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 0 525 525 ] endobj 185 0 obj << /Length1 1069 /Length2 5385 /Length3 532 /Length 6104 /Filter /FlateDecode >> stream xÚí—W\S}³ï)‚z¤‰4A ºÒ{‘.%B BèÒªé]¤I•&EšÒ{¥AŠÒ9<¾û}ϳ/Ϲڟ½ÖºøgfÍüþ3ÿu±¸Aº‚òW¤Š++‚JµáêP*(¸¹1Hk,Ê­dEJ¡’’Â@¤Íåâò‘‚‰IAÅÜ@EW7 ÊÞ ¼­È÷W8PÞ‰AÙZ£ÚÖX¤Ëe[kg «- ‰õÊ;;õÿzèô@bpH„ "P¶X  Ò…€ÿÒ¤Ž¶sŠÿËŒðtû· ‡Äx\ŠÞþ-“x)áŠvö"v°Žëe5䥖ÿ²þ™\ÅÓÙYÇÚå¯ô¿;õßüÖ.(gŸÿŠpuqóÄ"1@mWƒþgèä¿Äi#(O—zÕ±ÖÎ([y´½3(‚ˆþËŽòPAy#º(¬­ÐÎÚÙùÛŽD#þ©ä²¿u€ïk(èßù¯ÑþvêZ£ÐX¸ù;ú7CÿæË&aPÞ@3Èe—¡——÷¿Wÿ(¦Œ¶uE Ðö@a˜Ðƒ±ö\¢K‚ý @ô"½/ƒ…ЮØËW€— Ú¹bÍU;ø¸9 Ñٛą`µ¿IÖþI@€`Ý¿I 6ú›.#ü‡.g¶þ›$`Ûÿr™ñB`äx© õJÁÎàe*—¿ñ²¯`ôx™Êõ¼Ü‹Û( cþÀËBàåv°àå<ÿFáËBÞ¿ñ¿O[AÁÕÛO*&†Aþª#”“ ø¿# Ñ(wO¤º@$„%~[m=1$ûûC»É·FD”Ö:ƳÅ1ôqZa)™–kÏ@­#Qk´~Ž1ö~(1 qrc™å{g¯XÜ müüiU³Ãç’“¦—46ïÇd%­äß#»îOLdúÝ„ˆÔæ¾x˜Ý½xÀW΃Jf4 ¾¦|}I}ަ¼bÝXޝ éMâOŸ²jµÊl¾Y!z¹Ysª„þšóg•ߜŖ}Ôá+©Ó2BFãAÊì7XA9Hf‡}¨ ¹¾zu›·±nñ¾A˼E ÷Ä ·ÊÊjPƒiû+Ú¶ ¶Ã‚¢Õš~¼0S0»Z¬“ëä–ˆþ|»O'µw5“Wyô«óM¾Ïly; ¡øÜ¤‘£¢•„XG›RÛbó\) –èjqÀN@cTN¬¾«Z-NÎóä£F°* R1ôkEKâúa»Ù®×˜¯~†ƒkÅVÍ)W]×®ñ|nÛíàä¸6Ü©ï„ [ü¿Oskwg#ÐS‘íõ !Ý…91°‰‰×Uƒ·ƒ>þr ²üM«Xážrü´5·Ã û‹Ú—ÍŽúÐ#Póé +:Ò‡ìL«ç~=èO¬Q“f›gÁ=þOåZ¤‰–Î?ªYfÊ©?÷-„.ý¬±BÔE6ü¢EÇÞÏu¯ç».­$Öõ³YÀúsãΠñì=ا jãäû†-¦jìÒRaÒ<þTwy†š3´ ò€ÐÈÇ[¶lœyº9Õö=";Ý7D“èjökåµ |Öø8þç Âì“ÙL3âíñ™fA‚cNÓs…÷а¢Ä°3pÙN(ר™Îç SKu‹-dÊ>¨òê7{W ­Ö^ý b tý̳ˆJ‰÷÷SÍ3íoƒ†ƒ—V ùr%Ѭ†55ƒ*ऴÓ]i¯Ãx s'÷÷ûœ”\QR„JÒº%]§I4`W,ÇXVEȤÅ»CwuæCýLã8e¶Þ )ž((Ây»(ž~Ý–ûÑʘ ;÷FåÐ ôÉ9…<1±¨â tT3·— ^Úôi\üS`h~©œ¶µ8öøu?‹4*ºßÁj¯Æü¡a?*F'ß°ôÉyˆÌggq­”ªè®M5éÓWï}},àê*®¸Ç)ÐW?œv8/ù$/µå$ñ0x¿’_?mŠžÇKzŽd§mÙR£°¾AàÜOÚëÔšß•¬ŒF㾈Õ}…Á«/ –ƒk̘piïµóc&!GƒžVoß<= ÓE¯Òà^=v%Ûè¼Lê)zþØ™»ûÌÉ|;!5iâú5æÈ²Ø‰eµ×18·ç)ÛÅM ƒÒ@ÐaK¦ÿ8ÃBƒÙ¢^ǧ<þ0X_¨Ð4OóÝh¾¯KÅ–¹O» ïLbHY…Óí”GmÓ•Ð’3 ™'™ †žÉƒq©³j«çbuÒ=×=x5x¢ò^?ýaéqÿn£Dät"ü =gIÐãZF\TOÆo ç”C³%êgæÊ—"2N¢Íg[[ûJŽy®‘^Pxí>ã=‡¾Üq`u}·„åàÿØÆõ=ž£ÛÎ]0G-KÕ-/*âý>Ü-íÓ)LúìP»rßÚ»ãªp£•¥×ØÛâIJ)΂0xîG®pՓ̱ܘ]G  ÌjËì&8ãlj)Þ“íq²Ì—±º]-7¢ÊrB4W/Ž{¦†?yü¨èíY±=w’kx¦óKK[j°lZ_›# «í40 ³I­E¥%.Þèƒí‰¯/•‹ðDÉ:Ù8¯5A_iÙÄQ=‡Ìâ€WNµ•ÊSRÿsÚägU¢ôFZœÀ²t"sn5í²¤ÎF§¹–ú¬³X2¤Îoãf÷éѦ@ª Ö Þö•ˆÊÙ¹F±â®:bj ~×Á°üIb]Q„½‚p°çµÎ¯ƒÙºoü™×ŒXv•ªøç½å‚G>š˜)Ë-c|Ζ(Õ1aBA¤¯ˆ×•™IÑ5 q¼Íãx÷ ¥éýŒ2÷ìIýðôþÃÛ‚<¸ë4äœ}0îe!Ý«ÙÉNÉžØ÷y[È; ¨¹øSâ[ôûí•…[|úзñ’ ‹¡ù¼‹…hùªëüj®ß'>LÏΛ8þávNsÿåÓÜËÐfÑå ZŸ¼É%®_„¹1FÃRw_XÉÌÇ]ñœ^so_’K€û8ÈÌ7n6ýš>§(‹7ü\ÎûY–NW0I.dÃŒ…ò‹ýwÅ­Ö+–äÚø5 n×µ‚,¦Ê%É~/”厺,À¶€Ù£nÎ!ðy&!Y¼¨jv(´Nvå 9Eìwš€7æ…߉å˜ùÈè6–êM%µ}!!U¶Œýë§š~Ø¾Ý Çln>19Q}QS“ž½ÎÁÒ®¤š '¥lüÁN¨ÊÉ7dÖUÿ*Â+=oBõÀ§aWî RmJG@àÜmO›yzå{cz)Ù‹L¥-loéT[$ƒKœÜèÀèBsøÆA§ß@ZUnC%.¸”}Ü3öIë0·>Ž ý*nΆZþÍÊÓ쿚-¿„$æ{=k.“7Ãd¯ªî<½f*øøëF*3)»ìZ:W°L‹¹”š”'Ét“ ìr´PPá–=󪺃úö<Äêê~—ÏïJWþ$“M/‹«)ÍýW6¼ŠÝËNduMráPØ_ÌÞd1 /p3¤B)S.ÓŽF±Ð`ãÃ}û¢L":lG<@C²Tí¢§Fw‚Ý×vGðô³®B#tÁ[Ò½•#ŽÜöä©1ãnÏÊ!ÝH"mÜŒƒãòó{–mOyÇ%Þý²“kãôÇBओÒ]¬ÌêÃ"B¶Îô.?4gUæy F?Õ…9âH*–â E YCRU†ÂsÓ²NƨqJ#b·ÓpvȪ|¶^M,ô:/ÊJwÒsR§smu» V¦¹û«ž„D"S¸ˆC~ ¡#ñCÓ±ÆÚ6ÓˆREþÂÍðlOWŸ2¦›õÝé5.µ"%Ðwï“0í¿–B‘}Ý“.8¯Ž›?Ô)í†ì™Nª]å¦Ý$ÆÛs²4KÑ3=Þ}\;’EîR›µ¯,][¬T8q³«…g‹Q^k#"I—é-gÁû¤P²6&Þ\SÙNVc'ý¶)2CÅ’VM×;EÀB© ?ƒOé%ÎÆ2ŒáÔ*£~¾DÒY½ŸL<~€n·ŒÒ R<´ÍñI”óüh$JP‚Áçœâ#.e¤àWaK^G€¡${3Ve x“ÑOÏ TîY=ŠpØ*Yh‹¾"I m¾+ø…к*C Y(• ò}ˆ÷£í—ìRéo„¯³¼rü?^€ÿMð?"­3Òƒuu±Æ8þ¸ÐFendstream endobj 186 0 obj << /Type /Font /Subtype /Type1 /Encoding 379 0 R /FirstChar 45 /LastChar 120 /Widths 382 0 R /BaseFont /XOJCSR+CMTI10 /FontDescriptor 184 0 R >> endobj 184 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /XOJCSR+CMTI10 /ItalicAngle -14 /StemV 68 /XHeight 431 /FontBBox [-163 -250 1146 969] /Flags 4 /CharSet (/hyphen/H/M/P/V/W/a/c/d/e/i/l/m/n/o/p/r/s/t/u/x) /FontFile 185 0 R >> endobj 382 0 obj [358 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 743 0 0 0 0 897 0 0 678 0 0 0 0 0 743 999 0 0 0 0 0 0 0 0 0 511 0 460 511 460 0 0 0 307 0 0 256 818 562 511 511 0 422 409 332 537 0 0 464 ] endobj 383 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis 197/.notdef] >> endobj 179 0 obj << /Length1 1554 /Length2 10192 /Length3 532 /Length 11099 /Filter /FlateDecode >> stream xÚí´U\\]³¸‰ N q‚;ÁÝÝ=h5îîÜÝ‚»»»wîÁ !0ý¾ç¾dιœ¹šßt÷E?µkW=»Ö^‹’TI•AØl ”Û:1°0²ðDåE´X˜,ŒÌÌ"È””¢@#'ØVÌÈ È`áæfH! ?vfNdJ€(ØÎÝdná ýøO@Øè21²È9Ym 5LŒ¬ª`ÐÉ lm PùçG€ Ðèà4eDfa˜‚LœÆ@s-2Ó?NÒ¶f`×…Míþû’ ÐÁ" ùWó#"i ¶µv˜Í™Àn@ˆËÿZÿ³¸„³µµ‚‘Í?åÿÔÿºnd²vÿ?`;g' @l t°ýŸ©šÀÿ’[ÿ¯6ÒNFÖ a[sk €ù¿B G ÐT ädb03²vþÚšþOÈàþ`’’ÓÔÔ¢û?kúïE%#­“š»ÝÊþ“ý/³üaÈt@n]fÈxY ‰ïÿÓÿÍÄmMÀ¦ [s+'ÀÈÁÁÈòö@ˆàÉÙšÝ@7ˆ1£-Ø r 2o€ØùŸea0™þ‰ý‹ì& w;  íŸ'€É²j`Ó?¡O& øO€À¶þ‡9˜LN®®s°@ØÂøWÆ?}ÁÎlÿˆ¸ü•Á`r„ á? QsºüeÆÁ`²ýÝâe¶ÿIá„Ü$ü‡ 7ˆþ!H¶Ø‚<‚øˆ òâ&ý‡ ‘ûCšòRSáAj*þ‡>Aj*ý!ÈTþ¤ƒê‚<ºÚ‚<ƒú‚t×øA¶“Ñ‚t7þCî&ÿ!fH{Ó¿²$À¿ðŸõø !>æ!DÈâ/„þBˆ’å_q²ú !RÖ!ÄÊæB¶“í_±ÿ…+»¿¢áðþóFü… §¿¢áüB4\þBˆ†ëd…h¸ý… ÷ñïl°›'d~ ¬÷Ò–ÀÍÎéýÏT·Ù;¥Å [™™ òªý5qvpÚ:ý{šBŽÿf3äÝ€&È+‹`Þ Ë”¦Rñ‚™28ZhóæX…úž¹N”Àå8hëâ1Y{ÚÍ:­§òt,´¸×gBLj/åI‰KûØÔ…—ÃtVB­ëty÷};²‡ÀÓwíMó·gЊß6ÇKµ ³~ æ)ш©"¬“Bõêº4ôfqriI¤[«‡×Q±‘ª §Ú—†±‡n¸¢'ƿ٘ô± El¡[»w8c> æ&¼@ý4Œt$[rBA]=' ðnÝjàbàæè ÙÍ>¬Èi*mœ’gª"ìÙ×Ù¦{–usm½×#ßmk ~ÚÛ-'äï1 ˆ]æÖø¹Ðõ2ŽÇP³›–rm:؉¡ù$ŽŽD¥×ঠp*&ã^Ud*Œka•ÑÚf¾4LªÛÝqŽÐkãÀïì n Œ}sò²îmﵘ{W_ä҉D#¼ÔÞB–YxTÚ¬í±Ú+¸g>I/çåÑÜ0FÒÀQtø _(L ©ä ŸÒ[¨¡s’lêïEÙ¾ûa@ŰE„Ç’I]¦ÍŠy.ߨÄD…nÖðLl)6)§½C ™uBº"uå·pÝ‚ Þªôx›½Áï|‡v3ÈŸÏ™‚\¯@Ó6tİF$ºàÝŠwEúÂ(ÒóÐ ;´‚bœuìÊL¡ÛJ¦”Š©^࣠]E›ÍÙÄž“ß“Q{w+* p9üY0•ùñ³¸‹Ê¬B‡;Šášžv:gLCƒ;ÐK&íŒKhÙqú’‘"Rl K"ák€¶ü ˆN¾›g`ò¬8~Mìw×Ãt ¼UMÝkj–Ã{wöJ{~^}N÷æ Q!‰ƒI>äe´Ù{ ªZ¶éUÛºý±'c$#ÝÇW<¸Îç1YŒ;T«ùÀß!Ü?f(t%ø¹WôT#%Ñ]’û¯XÄ–O4¤ý-+J¥û¿’—7§Á%\#sLZù¼Ë­ VžÚ#1Š—ï·”AÏ«•c{úõ&„‘yÈšpPhƒ°Â…ªm‹žý½¶¬Áýá©@޲Á¢˜¢‹jºûî|Û\;†0Ò ïKaÇ/eBMW{Â[0RJ×÷AÂP+£"“|snÖ¾7ZlOúu´›˜èä ëŽ2»Ÿ/Ì´–âO±ˆ?ü*¾x%]™ˆ»¶:º“3ÂÑ«t:é]TÛíÖ½5ï«—A”Õ´k«+u:J½§{‰½b-ðaSÝá¯åKÜ*9ûÞÌ%E]…Âþåî_™+15'y«ú¼Rx•ødú%§'—½4î(šY³óAìk/áuÒ.›ü¯BÃW~ bN=×q¶Ù¯ŸÖ1lÎ)¶P4NªUõùè#¥¹ƒûº¬ÜÃÑEŽkĵh­7Œ<^ûºGRd£\qïU÷ÜOšt^Ú¾š4 9©êî[gEÃoüÃÖËÊŠsâæ å4JÁ}jøaKÏš¾Ý&L"¸@¶Òϳ̙±´>º•Æå&ÅÄñ˜Âäò„¿ƒT†Œ¨ÿ±¼»1‹Xäx½@ `Ü¢T™“–ÜN–G‹ ¿ÇJŸÉ-O…=÷™“wÉFÁ°"ŠY/H(Ž:Ò _>!BˆÉìù*÷—iïãGnZQÄ1Ucšç£wó²Ò-péÓ«C;fIøé€}ôNi} åÛv@׫¡) vLjZµ ‚Týõ´–Ýë‡HϾŸ‚óx•GšßÓO±×?IþæUyy‘-+>’Rê\/Üû¥ýäš]¤jp1dTïô{dÌúÈäÜÁ:µÆ€ƒ…bã#>ö·6T–ÕN;B*æ¶é \gÿˆÏÓibN'ÚŸà‘±Á® à\cå¼'•8ÂÜéIÍ¥2Í%t—¦á‡æ`ä°»‚šî+õÓéŽïr]ßù:zVï¹d|ŽàZÊöÕ7åÞÛ?ñYu3]…T¬fÆtî1é¡Õ4ŠcÜöec %Ï“UNæ“¢:p˜°‹z8´)™mݦëþÿÕ¼]Ô.~ëKÎÒ4-Ü;Eï <ï3SIƒ©Ý-ÞR ˆ¾ö¯± ¸Í¤™R[“+nöÂïȵwZút¨*TȦ" DPŽÙžÂbݱ¥$­}7lìzD}12ÔÏì×ø/FÑ~êO1¼×)U댵Amñç߲š÷oÞx¶¶²)*q¿Üû²4W‰H+æô¦!›Hê© ¹‹ÝD)«Ú3JTÁ / ™Ó@sIMGûT-’›—zc_8ià#búŸ&íÄF¾÷Ë>±ÞMU¢è«áµÆîBÉÛ ’‹Vñ¡jŒ£FÝ *ÎjäÝZ ¾Õ³kcØ®Ljž1g-µÄèg Ý©b ©¬5ÿ6ªeøyô¢<^nËs³£\48ø·'’{HUL³—bê(G\Ä5´Á~¨ÏôO¬Õ2uî¸n¤ŽsWÚµGxs~j\âÒW;´‚ÚÔbu¦éc®¤˜Uå]Üg›Í•¡G!%“ñu9nþ*»†ÌQ\Á ã¦Ô-íAs£­1±Î‹™ÝuÕàiÑ„CUFu–ª¯ž­,ãbZH’ŒŸ`L ¬sιÞĹx?šÃhP| 1ûlOAÜå¯Îã,ô Ê*m:VIÆ¿ûg¸Œ›o:ïx­xsÝ$ícÎÌ…#[¡¢-/׆¡`Û›Ñ8,«êOÌ¥rÜK~l‹×´ÏãOVW -ˆ©‰Ým…;ïŽC¥w­ÜÍpIN»Ãœ÷¨Ú€ËެMIŒ3õž ‘×?ˆò«Ú#N[ 3¨ÓZI]‘›Ô¡¦?m\Pèb f‹Ð~´ß„¥á”¸Ù²÷“›êDY M|¦ZÐCFî““ä²:ÁÜÁZdSõ3íú²ç˜­RìÇ\Ï ÀKôˆ)ƒžA~wVòK:½¤õÖ¡Å# ºï>ßæ‚“ñÈòLv¸¨F‹ÙÝ es>´]7›ãÎ÷k¾!N£±6Oùad*èÿ’ÝrRaä@÷sÊ '³ôÆ¥uj™l.:-¥>¨³$ j±0¿ÔígS.%öÆ?©ìr‚/¶ôX€iØ0-o‚±|áCU/âê7ño|‹ƒ³H4×8‡/l!ן|γ`„+5èÄÙ°v0SFåên.qeuT鋞U¿"Óed9Ü4<~æòþ…Á ,“`ùðŽŸä’ 'Áô‹ûÓ` ,anOŸöõÉÔ7ʤvØaÑH¦í¥Ä*–cšpÁr+Á1BñeYWnÖ&ðˆµÖ}4G>ŒŽ$ö 4"=öå)7ÁIkA¦uÁ–1d– ÙÍ$l×Þ‘:$Ãü–Ê64i JŒËô×°Ò ê÷Ý»2äšäïX‚ŸÏÒøžŽv§û¼?Z++顯j´>÷ìyZ¢±åã×Z&Ñus6V¿Ÿƒ,äJlÅü¥Å¿±½½.+~ ¢je4©zƒU ^G5íH¹OP®íEl’bGut‚wAy¥.¨¬Ç &Œ Ms¬~f[ÌŒìt}W¾4y‡üëŒâ—ž‘&—*Sµò}¡Ze‘§mümñ ywòF¯˜]"ÃãîÜ5ƒ=àöª÷Õ\ú~°˜òI¹y£Qñ; ŒšÕØ6­–î—K g|Ö¡lÉ_ B¡û~ MÒˆ¾ÈgÇè1Û*¡Þ²Çð¿6÷»Z_ã¸K-íf‡/¤0æ,¹÷†§û2ㄘ´äªCµÍ¿/@ã‚“¥ç¼>zÄÂ$}n“Ë.éç4#ÌMíe=‡’9®lPÛ„Ë]“ŸÅg)þ÷˶̫¡3:QÝ·Šœ0`pN<|ê“TN}iÎP–7Þ™›–ÝjIoSµ&ïaCœÓÓž¯pg9mµÞ…|dU‚V`Òáôt‡œð¼v²ˆ£ƒUªinŸÑ× žŠ –b×$l÷±ÅàVJWªUu.ù¼Ò#¶Älΰð¹hóËö­j$òïÜW#óœƒR¡3¼£Ï Åšô€Ûz“xkTâx™Å2ÆõkMq%RßväšÉ}™”çÎJÇö™¶N·mt+C]¹>/hn7•¾(tà#Q£‚ßÓ d®8}2†îdåÈö”þ_ð|o)t´Š=é+æou ¼1BƒÖúš0úÊv!Ü¡ÉÎg¸Öh›ö¹z¿Ÿâæïê3Ûv’v¶¨‰zN1BôŸÔC‹Ç›eÆ/€üiHá#Òdù¿ÏPƒ?ö|›°·D<‚Þa…·Õ¢kÚ 6˜Bü†ÎÒO”¶²"tý’Jé5î¿Bû-jA¦Ò“ˆ}.¬Éh#&z›bÙDèG|¿ŸÏ¢ÁÍÊ’«eÓ€ÛÔÍüâ)ežÓóF=-|™W€ 3&Ÿòµîy_ŒÇ™¡:«Ü?ü7jbKZ&]ìÛŒoZ9Ô󅌘蛠´ ‡¤±Žç#>Ï÷ɹžSóšFjNN-,&­÷x TªLF-ÚìgËß<¯{VPuЉtŸ–ÔL:(°ì³l(ÛÕ¹™2ü]Eí,w…{Q¨ý}+ï£xõ>´<ȦÃ%Ǩ$’…I9©·’^ßM[ë»ST×øìëwöÐa­8,Õs‘Κˆ0#µ[‹Ô7oñ¥=燨î#JâàpQJñ¹¶K¢$‹ÔÍf+Žø»ro¢X±ôÜYîʸšß¦tœàV*»j-õÓ.JK §Ç°z£È槆MqÈ[¯Q|@ŠT'6%ÅP¾À7õêÚeÏäô Ÿ¡ó˜$ãåjÑÀIÞ†ž ­æTþY""›j[>vu7t3âËT§XYžD#!ˆ*¼q»Ð0 ´nEª÷ļnA&qˆv™˜'˜µ_ê&*둞þMQ—$MüAíIFÄÓĤ¨”àmN ŽRw½ë†1êöê|ÿšQ7DY™´Çŵ¨ÊàÑ6ú°¬Àä.×;5Js8¸"ÙaÚËÒ€¼±X1>ÌEjA4&lÜŽiY{èaçqƒØ}l¿ÙiZÓÍÕ\AõˆQŽ]mfÛêÄœ]m"¥ìü! 9õZlSðÙž»C¿Z·…ÍM•øðÖ|açO êßh¼AÛÄŠ’‘†¤z™d©9+ËûÊ® p˜ÝQA!qSðs·÷Œý0jd½¹eMfIiãÑê8ÉÃ:¤_ æ ‘ j³lô¹Då˜c×$Ž™`Â#/~\ê0•pÜ›Èê÷ŸîýœU–¶o°ìòJù•o¼4Ðuªóé±g«f^¡ÏØ£w5û.cê¶9õãç„4ÇÀP…OwßÜ'yŒWMÑ87ÉùáÓ:kC èFVUÞ…À„õkÿØø´çvˆÃ~¥ˆ¤þ®-6ü8ÉÅ»}nù{NA4´×÷ü©ƒbØF‚5òwÃU¡°úÇ^ú5É™²µ ° "Â:U&P s‹XOò¥rqdÜcB©,•NÙM8,__¿ËoVãÕð±´ì.6uÐ.!·rg£žÆÀ4Æ8cµ]ê›R5n4»T¹HXUõÓçÌ£qbÔµl¦Üç]g‡ÍÅ>•?掗PhLFŸjz4©ÒD4ë[“óób2ã±jü¢ŸY5NÄæ”\”SšyŽÌˆ}ü†¿¡€.Lžõ­/JÁ+I©;ñ_ê `=:„w4lz%E:D?#8ãíDª¶Æ„¾dß2aa8ë«ëêè—¥1½_­#Óß¾¸N0ÂBd@‹"Þ—>Eö§q.Ô1‰¨`KÉhÅ^Hz–ÇO¡E7r~4Øùù®ÞÊçΖéknü5¶ ™¨ hrf\­ü Ò¨Jxž¡AfrPƒh)‰^Ês.Ÿs#ê¨6b®mÕ/Ž$û>‹óÈÆbª,‰…[ˆqc™ƒî:¡9 Åßsiƒ}dDá-»`ùvVc‡SÀ7!PèßõK_CXÕñ!§ûgl :ºV2=5³²Ž…ûóAÇî¾Ù‘ø=Á쪱ƒ¡ê%oé^•ðX¿¥ýœ¬D¶aeÆ£tpB&¯ª‡¥Æd-εu½5`ˆ”îòq`‡RÆ;1ãŒ^>ž²Ê•šWñˆHÙ×$oÜ·ÈEè·|3ÜÒ©u±Ý›á7EY»÷þ®wÝM1­Vîç \æ§ßÉu_j}.Ô)»Ð ­T ¢Nµµˆö¬N3|£ìt„Ã’úÖ,ʼ¿Ö#=ŪŸ€VÁ‚•%hz_O‹z£9;”U`‚ä°x%ë¯ÓÝ‘IÛä6[}ç¿ú°Oãýbk¶¥$Œ˜]”9aü>XÊáhRo£¥šÇoÌz?ÐP»ŠçZödeé^feu*á[ýuÙ®/¸¦%N™ »k”|QÇ´‰Éuì"~a]‰^©OÇt¤…wXLõ µìà(¤F¥lâ{µËÀ¥C¼/ï‰Ê›2ó×´è{/05ŠqúL€"káœNèQWŸÛ îúóž¥<Ægpàº_›P/ͧ²ñ済Îï…ò&ˆ†n2¸¢¥é‹~’Õ.Œ(¹âÕ›’%Þd‡úVÃç eJ©Ë†•Å”+U(m¯Èbß‘OØaîÅæe •FuæX>OJ. ÊÞ{­/U‰Æ#ûÝÜfMshçx—–Ľ·µÁ‹ÓáÃJ> ¹uº´yñÓlôüPª<•2¬ÁĹš?k£Yç¬ø X.Ühú)­SŸÊ¦]ÚQîÜ÷|zùÛ®$˽é]“À³ˆÇ´:pÕ͘_ö>iZTdë÷ù+½)|ú¡G/ëÛ%úì ‹¯¸Ü\¢Üà¹ë9;¹»àõì¥ß>Fîz(îU§»C½?•¶9¹†§ ›•H¼ÓŸÌÉ£ ÂÂŽ êŽü´põÇ÷Ó̵,¾|ÇÑÃüdÀ¨jÀØðºò­ ™§îM,7HeÑé©7¢¶7*7íj‰ qsxØ“¨ŒLºnk¹!À°C…(0Z­!+O€Cs•$«Ì¹¹ï©ò^†p‡6h¤£íëîÇag™·ß|6ÂWëu1½ÕÊ>j®~ˆýÁ GùÉlÒBuÙóê—¹© FEgYªàömŸlóyrbvRrÿÌP˜†ê}+å¶7ÏEÜ󂣤íH@Ψèî$z¢ÚÌ~lºmŸHÐÒñóÇp#áƒÞæµì!>xr®"Ûõ3ú ›ƒ<ØxZ(^Ï€ù„b+gX•¾†‡í\õ_¤3 ÙÝ2£õ».I®†±$¿¢Œ¯‘ÇAwañ¤§IŠ~õr^Ù‹Öš—•ðIs´YhcѾòë力ÑR·ixµR#ÏôÈ[+^Dí?ÖºÅXÄ3Ùy$†êötWIRó‚ÜHšnÂñ“*…_6Ø< ‰W7<÷±&»dhq; •:*«Ñƒcñæ‘Û~zö–ïZY™& À RÕíkòf$/‰ˆa ½òe™H®Áb½w¹T-½µn=å,ìÁßY‹9Œ™/ Ñ4é]²QöŠ’­ÎÉ¡ëœn,ì<~¸½ýý©µ„7^ÖÅ\V>.”ÙíÂÄYmîL’­H+à¾ ÃÆFÅ® Æy^J%¾ò;î¹&u)ÔòáSÀ'ÙàZ‚Þ9 /"t8©†_Ѿ¢ßQd–z½.33u:…<ñ;àUPhå_ïr²åýœRè¢QâÖÎDý}¡8e¢úþpE˜ÈæéÖTmžîöÍ›*ùŽK«H}÷ âËUî–ßmâÕ_Cìv¾4FÌx]ÑNe3àËD Ø-"³bZ°áßq³„ÕŽŠ×¦R*®9yÊXPV‡Ñ_qhºöw‹²¡h¥9âãÔÀjùÌŠž²xVЪ†Þ\rõQ‰·•Øšl™¨[{f!;ó‡öÞõ]ÂìgWQßâ–˜aí¡ž9çÝuz°‰k{Q.4àЄÈQíwñ*’x²‘Sç)9¬¸¦5<{JGË“)kål†Ó¾UFàœ¥5& ¹ëbAqdþâzAÓ!tT//Ä—ƒšò‰ñ«9 ;ÃÔ39c´Ì8˜<\h`Ð?òÌ·P0•zz¹÷©Þ¯¥Ž.iá¥^¡Ùq ˜ÚªÈ‹AÃë}üE­6]Œü¾›ˆ‰ÏRUünïqürÝÿëèžX%f`¾õý£dø”™Î寡³]ïë¡*s?$fTЦ.hÓ"(.ôëlhˆæINˆ¼Ýohľ‹ªùÞú:íã/S&)€©R-ccÒIò’ɾ2¤úujH迱|òàå$„!ˆó½kƤƟg™šxVJëîûðaš7Ÿ¦JJê2Òú~ÏQVZeþð2ñŸö8‘j\p}ŸoŸSa‹ƒÁ¤`ù¸xwãóºý ½½šÓ¡®kdÁ£6¼Þó@SEöƒåÌãòåwCðB04'Þ}bóɪJÄÏÔ·sýÝñø™õs¹ó"ÖÃÚ›¢b„Ú–´}Z9}ò´ž,çh P)F¢%4¬6Vë:yS”Œùñ±¥†1í£•]S^é6T¦«¥13;vb3³ŸÄÓ“g¦a’²ÖNÙO«¨Mesš82Òqõ˜‘»ºÜz𳓂µ70øóÑ„”<¡â˜AÝX¡³Ù¼n[oɺ¡éHP E˜l{é j 0U\‹þžT †Y¼qõ¾K/ƒÝk4yä‰ Œ ýünî‚Ê]dÉÿ¤*Ò2î}oæùfWwø£œžmn M•Æ W]ÐòÄùé@ÿ6â­Òõrµä|@)ÝTo*H”~_ÏO”“Xv´Câ/s)Ã¥ã¼[<þôõq´Æž´¿Ë­^Ö¬>É8q…¯›¹qr?êj?øÁhÒ®Ý |SÁïä¼D$â}×ø[/ uäË’-ßAÌ`Ž1-ýx¹+E#†7nZŽ g¬ÖRíMŒj[sp»µ9wQ”Žuû|óËðb‘úi/(PÌ eŒ–4b¡Ù »^‚ñd6“½:%í*ERº¨FC¶?B[ 9Q™Ù¥2%mt) ú¥­¾æÑéí~¦fc¡F¯p¦N7I­* ¹³'ò¢03 ä/¡í à50Ž‚?òÐ Ã.Õæ5œ'ævî|ÖV/Púôò+·\؋Ȣ8x†©ÆÞ0Ãû» ;ÌrǨàkÒVìc_qÍt*ÔRHΓ I7Ýê=_'Q$Îî¸Cø³ñ…ùƒWbDp©ßmSÒÞ¡¶.›…Ù,ÿLËÃŽ¹P"«jŽ2›G ‡¾—-¼4qC°g‚ÂχŸiŽÕáÌ壚´„ë¨?¾~âO°îf$c>¬]ùŠÓá’'ÛO,6©D"34;ÒG•…TÕZh,—¨eCJ'e¸1õæÝ; ^sð©­3VTä÷¯‰’¤ø¸ÑÔü mWú³.Y2k=Þ^a†9Ó=ÎíD<Ä‹/k•èð¹A8 ‡øèD?ú½¿®z…0FÈø._hêVXîùÆá w¤g<çö‹3#¬ Þ¡ìç¨9ƒIöós¤5¢ôÓ¾Î6WŒÙ¹>ì±M˜×JäGk_/ R(s… sª¾¯­"±Ý|ß¿ÅØ•Õ»‹©Þõs&gv'½:ÎäY¼Œ©»|xµT©Êòƒ/T5_#™5›þ4UßÞ1D‹)þ‰®ß š™èyçR (bŒÿŽÔ3qû\|I.8BcWåü|Æpjœäȼ¥hŠ-®í•ñZ.gÈc‹×Ó°òbµÖõrþi¹&?,çüWžywÿÏópíä‚ÉÀÒ7¦Î͇•¡jfä^‰&#ö¢Ÿá<­²™¶ÏX€¸lß ó.8ÄðÏ=V‚ݻМ·˜Æ ƒáU\ôb¼‡’Pû 8ˆ}a/Ý`W¹RfÊ-Û dÏ ®çDÜèËw˜ CÊX+IÄœ½'°¯¶I*zLJѬå²tMáø¾,ÑD>„ñ¼fÌW‹=0Éׯ¾óv ]'bæ HÕD£z|]€²!ÐèÂÒbª¸õÛ"Ùâ[m™`ãcjëŸ> endobj 178 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /HFLWWX+CMBX10 /ItalicAngle 0 /StemV 114 /XHeight 444 /FontBBox [-301 -250 1164 946] /Flags 4 /CharSet (/fi/hyphen/period/zero/one/two/three/four/five/six/seven/nine/colon/A/C/D/E/F/I/L/M/N/O/P/R/S/T/U/V/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x/y) /FontFile 179 0 R >> endobj 384 0 obj [639 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 383 319 0 575 575 575 575 575 575 575 575 0 575 319 0 0 0 0 0 0 869 0 831 882 756 724 0 0 436 0 0 692 1092 900 864 786 0 862 639 800 885 869 0 0 0 0 0 0 0 0 0 0 559 639 511 639 527 351 575 639 319 351 607 319 958 639 575 639 0 474 454 447 639 607 831 607 607 ] endobj 174 0 obj << /Length1 1539 /Length2 8611 /Length3 532 /Length 9509 /Filter /FlateDecode >> stream xÚí—UTÊÖ Ñà 4îÒ¸w'¸…4NãÜ%@pwwîÁÝCp—à.ÓçÜÿždî}œyš5Ý/ýíÚµë+]«©ÉUÞ1‹šØ~KÙBœ˜,@~€¸¢˜6daC¥¦wƒœ,l! '0?ÈLj:›ØÙ@n~N~.NTj€¸­›ƒ…™¹€Nœþ¯$€¨ ØÁÂ(‚œÌÁ6ÐÆ kÀ;[c °“ @ÔÚ öWG€Øìà6aA&ÆN€`3 *ë_F²S[Ï¿Â&Îvÿnr;8B¥tPIzTÑÄbí0›¢²*ÙBÇCMþoHýgq)gkk%Í_åÿ^¥ÿjÙXX»ýO†­³Ø hkv€ügªø_rb¶Öÿ5Œ¬ÈÚÂXbf °ý+dá(eñl¢bádl0Y;‚ÿŽƒ!&ÿ©]¶¿Xee4ÅÅÿg?ÿnTY@œÔÝìþ)ûWöß üÍÐÕq°øÐccacB¡ßÿ2øÁ$!ƶ&èàâ€@n¨Ð“%.€`1€?BYY ¶NÐ.è’xLmPÿÚN¨«©Å_±¿‘“ Àjîfg†üqXí »fkò;Ä `u;ØþðXm!à˜‹ Àêäú» esðkëìð;Àñ—ˆËœVGè"üÃP5G°ËfÐ ³þk ÿ‰ðX!Š@Mm­mw↖ýMÐâ¿ š-ñ› “’ü‡x S’úMP[ÙßQøMКŠÿ/´ŸÊo‚N[í7A«¼ûMÐ «ÿ&¨§Æo‚Ž ùA/+è7A­?ü&¨µñ?dƒoòB7üþµ  ÔÇì„ ™ÿP#‹?ªdùB¬þ@¨”õµ²ù@¨ä„ZÙþP+»?ªáðþuþ@¨†ÓÕpþ¡. TÃõ7BßPÖ TÃíoüïû,&fûуzH™Ù¡‡äàðp±yýï‰ {g°¬ôü³±ñ@ÏÏ_Qcg0ÄéïúVü›M- / ülŒº0kk,h™Ô\â-™7^ŠÈ+fÖ­ô¥kª-`>ÖºpPÞžág­ö]Y*.æ6â6™ë±cX›§êˆÔ/?ûèä™§m£íT÷fbí³TE·-;Šë€ƒ—­ Ó‡\°Ê“?‡Jâuò¿eœôä¨ÐI¨ï ý ‡éÖs©ëN äæÑ–JµÖ ª¥á WÃJ¶/ å YvÅŠEX ð¶ Anb\:µmsƹËCÎŽ{zo2¢it-œè†±¡{=|SãkP¶áœ­˜¢YñðAïY:PÏú,"mšöœÉI?¥²Ãn±r:3_÷Vù5g©ô'9 ‹°–ö|r ˜šè*Ÿ±ÆåÜ6s#]¥+Òá¼YsyéçúPw£Õº)ÌÈ–N@2:%†ð³Š.žêYŽC>h!j6Hò±¢Î'…Ô1ºs×Rª *Ô´ ‹B…jf+˜YögýüáP‚XÀ7Tn!óüh{ M¬Á #Iì0«®/¥’qXJз²/BNúeÎ[á̃Ûïªá¼\6R’›øv•¬JƒörcØ ƒ-ÐLþ- ½í[xvb} *m­°O;Ì@Ó¼os"_ÊjhÇÄÐ6·Z!BÙ 'KÔE\Nù?Y”™ ”"ÑÄ_¨ùp/½¥qíŽwQªÐþt‘yŠ,þ÷2keæ³)ÆZÚ\n±CJ0Ót΋¸Ysã…xNZÜ÷Do¢Mû,6´'mÓ“ÙEÃo†DTSH¿ò¨§}¤yLöÒ¾×`}öÓ?+¯¸³–2Þe 20Ü kŒzïŸå“KS¦uâñÖKÉssªñƒëÞçâ…;NN¼Çâ™ÖÒ™oS±³Õ}ßçM¤ïq¯êD“>E­±™_•ÝÌ©‰ÎT$îö@+¼Ïë9ŽŒÜ´X™ùRC옭ë;þ~#'Ÿ0Yìq¹‚|H)9)íŽ ù¤‡k«@›6¯ƒ'é ºíå¡W±+©ngî*ûýR;°®¬ò !Ýqß.ªÔ×ñeÍ9ÚÇ "¬(†¨FpI&Û™a…'”óÍ™¯pêr”Ü>©J„-ðyˆ8æÀ̱Wn¬K1õ¬%×e–gˆö­)ÞÆåø®,YÆF¤Ùb—ƒYeÏB诰º„oêw¾Å°É="%?¡?LÌ‹àÀÈxæ.TÎ?ÛN§ô™‹'¥MRhÝ…{½ýYg:< al°è¤-É4nºç×cäÀì˜åµ€÷\ˆÄû‹£œ k^ûÓ§5J(Üy9Ç.³Ü5rvë'ñ x úDk2zs¾gÎÂ?sZXš †U⹯ÀF£·»––'euVœ ~­Àºm>¼––c1ytD»€ ­õ’¤ÖæXcoO¾ð‡(þŒ&"øŠµÝdæd‘ñ6eu‡ZCÉ$Ü=çÏŸçUµc¦ž*ÀXÉŠKú¦¾o „À†9oçñiÛEÜÈM7ÿ>áæ.-dféÐ#øÜqö²2u1â:…UýÉóÑÞ$ù¨p{Ì(±Ìˆ‚|1@áüy‡Œ €JEHáßop×V¸DH,×›D–0è\+¬Âa#F9ŒÃ+N{S”©¯Âm‘»ÙÓÐFûÄpºÍ´òqðgj´yfµº_ÞVŠaáó=x§¿á mäk• g\ña:I0Îê-`+ZUˆGSo#ðQ}cMîÞÕìF³‹E°öµÙ«ã‡®”)Í» €ÉÏ—Íò>ú£\öD®ú1FQ˜ÁÄ_œϪvúž~쎅­Ý0iaàA•ÆèZ.•Z¸Þ¶¾ÔÝ<__ʘ*™È·,¶Ï·ã…}£‹!”¨D¡(@<‡Ü¤¿8Íæd¨ÈXSáðXjK\J/‹1Ê&Òü¾ðøˆë…'E½úK;äî¤#ƒ—¿Š‰d|ƒ#®5#ï–UM8Þ³wí–W† Æ,Ù2ÜÔ­sŠ[©ïUæC­ËŽnÒ G+’Føþ–Í— `týÓA3E·’ Þ ­Éî¢j å+'r§Ì‰{‹¹Ä>:rî§«•£ŸFæ¯"±'#æŸ3)ù íþvÆu® 7B27•Ñvk,åïרLÊÈŠ#p±Gî4_¢ññ2%Ú½f”"«$F³ç˜³Õ1Jíš’dIxK"ußÒ1P+V°WݵÅÁ© \ïØû̓7€¥>(m¥JÄ>LË”Ÿ¨eÍð3™F&‰£ŽBëIzwyŽm•֣Ÿ/çÎ2sXPóA\«å"䯥žÄ@ÎNÕ€ØÊ¦¾—l^¤[h‘±±Ž'4ëÊAÆe?˜¹Ü2?LN=*×ù$Ir ·KÀÑÊ&"ø.ï]þzÄHÞhÆr¾ô¸l'nK›ªxB¶$xDCØ€ºŒ°@—¼Ô£zdL"È7Á@_1Ø=>Fz‹Û¼ÑáR*ª»ˆCìUL¢ÚyŒy©¢q sÓŸó?çÞèòŽ¡»ï S‰Z጑I“ï˜Im’Nx—ýr:¦´Ë’¨6B¥Žïı‰É£ ¾´ŸïT|ËûtÒ„ôíÇèF~<Ç‹P¤”’Ççwz.VY ZÔ—Ë!\$¨½y¸.4„Úµ1Ü+ÙA}Î_†®—ñìoðáŠm×ÌçZÜ™í_­]œ› R?˜£ÓKš²>›¢V+ó«Õ,¨'MÊH·ÜÎaGÁxà 9d4·œ~m†w‡¿Å ?kÜR´õﵨ7å6Á¡±7á “Š–ÁŰIZ–&Ÿ^ÿˆwj)º«¦é¶Œôµ&)Òl±%ÚeŒûÂSpõaaÆŠÔ/•$i¨4pùf⪿d©6?¬SÂÖãµxI²¼EÖé+ÿôð€ZÃýUÍÉ?¢? ÛY‹ŽâU*…1v3ªÁ¤Å0ÿʤ©†'UDºð댦öÍ‹ž†M½&_:3±¦™»ÿ( êÔñø§Í‘ˆ•ǨRŒzÌK²áˆÂw\W¨3KXƒ?çA‚„»ŸêÖ„S³ó^mëºÇ¿¾ðPyãëàug=ý®ø“ä-û³¢Â¬&{3RŽŸpwEòÒ,#‚7—pS‹iîö‡.J•6’¦æô‡Ï*dŽï.GaÐKÉë%Òâ½ÅKÇáR†bNÀEI%FÊZ¦‡ø=:± pCÖ€þ‹ .wo~W ¡)¦Ë2瞣Óï蛚 §¶6µ’¥Õ‘*ï]Svľ'4ÄÙÜñ¹fó =â(ÊMÓh› Þ‚q§(QXAóÏÅÐè7ªn­ SÌ_X°‹¨]¹2xxBâûb8 y„ÐäµS}ÿ‹”ˆWEöEùJÜWŠïž¾?„S[óåÉiR3EåÁǽ7keú kF}ƒÕ½,ÒÝóuþÓÇÌõô…ø nñ—¥×œ*ª2¢*Ö$ì .©l,¨Á¦:1fØÉÞì>’hšÛTØðêÁky9ýÎJ¦]ùß ‹…˜'g7 >— }W7¸Çµ¦©õ¯ÐCðÁ¨F†IG”úVÚ§r0*1QLK'x,xT§ýR)QÙUòñ1\=% bÆ…b©]öFÛçXiKúXCsòŽà¼ãBHš1ÏXAQ-…·íõÖžê`5‹«Eáˆ×+ëœüé&xø«9–±¦Wï“èHITµb›¡¨æœ@‡Ð4ÙÚš¡UÂrþ1ŸÏ Þ¸\Fõ9éëÐýSló Ȅ޵›³ˆ=U,ÈtcöŽÌÄÞ1%;ÝV‚µ ŸX«{Bl3úˆÆÐ펰ìµöï`ãó !!1MAùW‹bJŽ;ÚgíÞÃù ²15•|õ x‘Ä"äùfߥ$9øMóYÏ€Œñž­åíA¦ÑÎ!¦Mo“¯…lµØúcsOûƒp$×ëÃKÆvد“ ê^ÄËPê!í.šÄ?Ì"æ…bäFðãÿ0%Ô žç¶Ã‹XrÙš|+Xy®.V6êšqòôθšäÅ}1ó(œõéé [Äu ·BK8ëð´mâ—+‡˜ü™LŒýcÜ8íK?}‚&†óñË ¬|¶©xýý{%–»J)4ÅÛØƒ?8^ óUÖÃM䵈·?nˆØ%vì7ŸüRzmãF{¿µ Ÿ9nclÅOJ@ÖÝ£ˆ*ÒüÑðïã­È¶]k£½øj_#𠻌x!üÂƪÿu±›Ž,|±I½zZ–MtoÚ|¶[¨_P´?yÙÇåÀÚ­°‰vÆ)/ÜÝDκ ×Ü6²]9¡6ê…´ßRÇ®FB²MÚ[«Y*»’Ä^ï.p°Ü‹‹®§¥%ƒM–h‡åžÜ¨áES'ÞÑÄÔy}¬¼l~Ži— !lCçÒa´ãøâ,E.‰É<ÍÜ<Ü}_VKmàøŽÀáø³=aÅþN¼ZL³Î@L {w£zoïÔ{*Nyî´°Ô©f¬5b}aj†âR ]Ý£¹-1»î«O:"ºŒ'qÆó÷ÌL|Rõž-”¿ü¸Õ¢6M£–l~0¬; çzÛ<5éq½Mð ¯ÖvÜ\‰q¾Ô_?Ÿ…© Éžþ)2꯽”œíý”(¼É~¦æ{eiû(<îÄ@ø¸ù¥ ±ÝÕsë»óŽn·ÿ±ÎŒ•­¢õ>5âŽpz…j—ðÝÖ¨Q»&Ñö¾Þ-|WËWQvÊ´ /|š€ÎÄA(ýá™·\Ã3í(úV䦾%õùÑcæÎÙüKYn^”³É½Ó:é¾8²(Î+y¡¤ê—8¸òK˜dÑ‹Ãn˜­™¸$†7ÉÄRÈ%(j‰_æ¹¾ÇÕï­Ï t ‹Z°xl¿™Ÿv‘ƒ¯ õ£´¿{t/F»‚·'ªÜw8ÍGòÐn®Í¡\ x›®/™ñ«ŽnFá¬B4Ý·b'ÁOPYÅ-;ÄÌƼ•Ä"©¿·å$X¾Ñ`Á[žVlm#}Ð:¯új©±ï¨=,ò¹ûDHÍ]K! ¨Vql@µ:?õ:»Ï„–ÕÂ9(¿â5Ï FM•»b! Ûûâê Ãâ‚,¶g´ÀYçE  i‹&“ûÐËrçø¶ì _Jz¥Nmq^â´ðC÷g5t„ê²#ö›–ÍWÁ{žž•‹/vŒ“@Š‘¡è×Wõ!YäÇ*ÄRxùó:äš+À§¦‘’76К‡wo™æÏqƒF*¾Ýûœãßw„™jÝÏÓÖ†5 _*­ÈA ?J‚Õk´Ô±ähK]ã,¯K½(âqÇ6ËäõË2Ú0Z3ød‹»´&–†¸ôgŸS¤ÈˆÚéö`’ƒÝè*äž…ƒ›uÃÔÂ]¬6ƒh(±Dðo±¦uÍ}E[£¼´¾õÕîY‚Ç¢»Y³™dI蜔ÎЙ3º!X…Z1þû‚/Ž0ãךHr¯)ûGññˆ®·}:g÷§"ðØ~0žñ>­¯o°(«ª\ö™\ÄïôÌp$b¥-[‡È —ÖFFúíй¹è"ÒâºX‡¦c­Ëð$BBÃ5M>„êmfUb¾ `›¯e%¯¤’mí7Ú¶ÒJÁ?øm¶¬ž×º­JMJLÒ”ìݽ+:„xá8¶½-“Ëﱕ•~§"u0¨Ç¾ý´l,ãùéðN–Þå¨iu~Û?³ý9Äàû¾‡†}ÞAë‡ ðåΖ…}FŽ^ø¸âC—°qê¼{gPc ½ Ýþ+½Byd%• ¼T s$æÂ1ÕôH¡Ä•'_[ç ½û' #êS‚ð-—z¥ÃJ%{1VÂÅ{ ‹â“È™€ÒSÒ© Ú[U1ëû6i Î×íÆÛ›%"Q[ï}rG[ã7Š6™ürÃ9µp!9B³ÃH§MÜÇj|\1.¶އe)= žæ{™´é×@£MÂÁ” ­šHõƽû ?é¾@r»ï-_ØôY}™êÐ>ú‹MtÝšVº‘(ÙF-±òÁš_FŽß, t]×õ‚án§Uê!êrÒ"°g•,Tɳaí¨Å›—<èù]ܤ2¢"B®þòœ|&;1„´zm¸ÃY°Ì8åŸeÀ´‹F Á‰÷Jóa÷Wᣃ‰CS¢ ž‹´Üü4xLøà8g" —µ_Ó ž˜¿ŒÛ‚îoÀþæž[)˜k}Ú.bÓ0þ³ºÿ©êç05×{Ó½ÐüÄn¦-%µ¬¯Ò6ÖˆF8†äŠoÖâ6ZYå(3¨ëHÁpZØ.g;‘g‘}ߊ¬o›Îìïäøò5£Aª®–éÐi:Ïàˆ!‰ô:Lºb:ŠÌMÂm4º¯wèg'WJš†ÖÇÒÑ3óÈÞòø#›ªK$|môѸEµäЦI=ãïa¨w›Lø²¬™ñ2r~äx‹Ë­(g„<‹òÑ8Ç‚µŸHF„ý;0»6;(L߯Ÿ ]ÚÌJYßÕ0"YjNš¹+ºÜ»ýz”çXf ð ËA´6Fâ_ZËq3ÊðۺϬó~ËõÕÇmü7e0:/c`~8p¯På/S=Æ£\tmáç®LÌ.¦;gÜ B°“ÞóäR—M&ˆÜÜÄK³•Mm å½õ¬€=Óº^+ÆÜ„÷ékó ñc›#¹'îKm`ñœ|sý^衦yÖóZ:²± ”CPÔžðÉp‘–~õB ;m±-•(bÿ¡¹ÿSŸâL 69 õ²Ÿ÷hƻɯ Yˆ4üJtáÄ!ð†˜ì17#–Íe³š—Š’žÙ™uÉ>¯›=À¤¿%äÂÑ,mŒëpH~h•øšû ;k²€K • +9¦çäÀŸ‡ÌPìcý]‰·¤{ާn­ÅhdzÚ÷ØnËamñºMwa¼a¶ pocäæ9÷žð“¬pqÖªXÜ”9ðáЪš„ ^?™ÈŽ0|Í "Ãzî*Þ½ê˜ô9d Ëþ˜4âÇœ^½ÏrMTË¡lgµk™‰qbßRŠ87þÌ$»ÚΚÜÞÓ^´¤ÊTéº=Ýè mËvÿþ-_U…Ã%’ì0/ÄKÀĨç<dÔë¿4\M(/Ñ|M½Pw»tq”²ÚJR›ÉÜ0¤PLŠ×4yÍÁÇã%—z;äîEÄa!Èýf1XŠ8 íþÁ롳gÓ±nº´_×Üø© ¤ö•—¼ö¡ùVOW?d5sÅóplR}Ü–/42nP< B‡õ…Bæ&ã!I+9Ñ<)zݹ ×@È3$ÒéÆt‚Í׎„Z‚ã)ÿmÆÙ1,ððøî„^´ $?Q)«pD)íU^¤{¤ÿnÞþ‹¹éOåƒc¶ã{ÖëºüO}åQR\T¢kìݵ·Ü—û€ŠV”üœ¨/LvQõ„ŽJï·'å_fJ´ïz V°Dv8Ø z¼êÏŽ€åÇᥭFðÃ_Û0,N¨Hö0§µ?;x}­Iiþ2ª%|àyGò€õU°böêîý&HšÙ ´˜8ƒïIyÞ»L5½ñ3ùÌrD¦€e—|&ã–"ˆÎØë™H“nþΤv|ÊW"(Nc6;Ï_µ'•–ÄÞÇmÜ|ÉßlêŠxFÔÎ2ÌkQ£ÏW% ûtŽsà¾WØbŒöÜ?vïœqN†]‚|[ö[ôóY;„åÀ0¦¤_éd*~6}•!8¼N.sóN‰î–ñæÐÀ&xg8s¸ËyEmQKŠß¤z¢öeÜ­wŽ™ºó-V©÷Q“‹x(½‡˜®Öâp…>Û‰ô$ÃÒ…~cFg½»é[•äø§×ïûdéîƒáì¼Fµ—œƒÍwÖèÉïLçÉDBeÊÌs'3a î ðy8mJLÆ×÷ò‹O‰ë›²'ÔU˜gš·‘ÕœnT­¥pŠïûJX?6š¾Í±Â­M¨GÏ%)â U ì–=Á• ':ªÎC8ãbx«,^-¿éÁA{ ƒª'e÷$'…†'Ø Ñqåú¾ËŽ%rç#šœËÏ›f\GFƒ™.ÛµIúÂk~,PÊšSˆ\{[AAžÚ‡èÚK^q¤‚P"8·òάTb]fŽŠžM†¡¹c3W8I{*–I­Þ¬|¢Ä7ôýPW"kÍ‘ÅIéxÔëÅ«ôkYc”Q¯Ã ý4°‡‡O¯'ŽvÏò•ï÷2¿P.bKÕ9+½Òè—rn)_^q)M¸Ñí®zÖQ3aò,ç4p­¿:ÉÃÌß›በ|ôMò†;²ýzß‚¹Vý†7Ð÷²“x–"æ=ìM#ºc›™rŠõv>®¾”c|®1«;jè í%®þõ]^åÔ‹-WYžæÍ¥FCËŒîkâä«3_Lj›©µ 8þç;R«ÇåæEÏâ­Ôéå‘=T I¬æYý—ǰƤ¦„¦swD«À„ˆÎóÂ#6øéÈW±%ȹü"³2ÑûŸÑ³¹Þ\È\½Þ.t™¿Ä—ftJ~ØS{±’gû¥ß¤fÃxòþ$öÓÇ5Í%xÅ{­æî@I’\Kw~.Eï‹§âYj™oW»üì¢äÉoÔ”g”ûòý¬¿îTƒ¯Q ‹ëÈC~xêO½+l¤×?Ô1µÅEV®GöÝó1\Õèœ_g§|± 8ÛY})FS>šM”!½Hè}D7;´jfua°>.رãó…{ ]áôl&¤Ÿ5ÈúTìó¢AFÁ÷óÄ,MŽg›B\Žñ~¶üÔ)®øÚ§@§*M^’a ÒqÆéæ]éá4,F›\¹ÚU'˜]aXçFdõ°J¶ÿÃêÿ/ðÿDck0ÈÁÉÖä`…ú¿¹á%endstream endobj 175 0 obj << /Type /Font /Subtype /Type1 /Encoding 383 0 R /FirstChar 12 /LastChar 121 /Widths 385 0 R /BaseFont /IHVCCM+CMBX12 /FontDescriptor 173 0 R >> endobj 173 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /IHVCCM+CMBX12 /ItalicAngle 0 /StemV 109 /XHeight 444 /FontBBox [-53 -251 1139 750] /Flags 4 /CharSet (/fi/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/colon/A/C/D/E/F/I/L/M/P/R/S/T/U/V/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x/y) /FontFile 174 0 R >> endobj 385 0 obj [625 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 375 313 0 563 563 563 563 563 563 563 563 563 563 313 0 0 0 0 0 0 850 0 813 862 738 707 0 0 419 0 0 676 1067 0 0 769 0 839 625 782 865 850 0 0 0 0 0 0 0 0 0 0 547 625 500 625 513 344 563 625 313 344 594 313 938 625 563 625 0 459 444 438 625 594 813 594 594 ] endobj 162 0 obj << /Length1 1717 /Length2 10401 /Length3 532 /Length 11397 /Filter /FlateDecode >> stream xÚí—UTʶhñà! q§qww‡  Ð4»—àNðà ¸w×ww NÂí½Ï½;9ç~¾÷õÆkúƒ¹ªjÕ¬U2FÓP¨i²ˆ›ALÁ2{vVv€¤²–;€•M•†FÒ lâb±—2q Øùù9âN;›ô‹J„8x:YYXºè%þêÄ ·;YLìÊ&.–`;h‰-@²»x²Ämmph€ÁNn`3VTvv€™È` ¶°²Gþå$ooðþ+læêð?Mn`'g¨€þoMTÒ boë 0›£U ÐÙÀP—ÿZÿ™\ÆÕÖVÅÄî¯ôWêµ›ØYÙzþwˆƒ« Ø   1;Ùÿg×7àÉ)ƒÍ¬\íþ³UÞÅÄÖ $noa °ý+då,cå6S³rY\œ\Á‡Áöfÿé­Üß@9m=Y% ¦ÿÞÔ¿ÕL¬ì]´<þÉúWï¿™ý7CËãdå0`ƒÖ—Úú÷?ÿýÇdÒö ˆ™•½€ƒ›`âäd≠=>Pâx³¬ìÍÀ°TÈjq@kâ 0‡8¡þµ£œ\ £+ÄlfjûWË¿‚< ÄÖÖÄéŸè`â¶·›»ü޲ÿwô_ûüOš±³3ùá-=,Áö¿CÐI Çbö;Ä :Ûš8[þŽð€^`'Èï?±ÿÃÜP/÷ßíÜP#K'ð=8@sˆëï¥psBVnô€ê:CËýCeÁn¸BK ÿÛ¹¡ªöVŠðýµf[ÈïA$…Ñɵ¸Ð•óÅ·6ýëçM€¦)˜O×Ç-šÄÍ—Œ’…%òªHV¨·ó[Ïú’•öÖ%é´Ö¦L¯„S$Úç¡™ ¯ƒq uƒ#Œ·|.—m'¥!Ó¢=hŠV‹Ó•í;)*“åg¶Î ‹3˜Ìj&[.þ;<…Sq“ô—x¨7È×+÷+kdîËÁ¼ÇµÇ‰µÜˆk²áÊKSË6íbikù7[Rƨ嚵ï1¾7À4Á¼V¯b..ÈØÓÇ3"<û›€õóš8 Dx¿¬~ìð!èæ/_ž¡pàõ÷ûJ³WÉÈ2 ‘T~3u±ä#Köë!£ÄqTŒ¤­ª‹E) ¡ÙëhS¨^¸·hÉ#ÐO•Ÿ«u¿LÝÖžò€/®´¨÷€y;k`‰/¤„±NyZ/’ãnÉ”¹µŸn}f+t›#&vÚí£äÔfd—^Ps Ü)â§(fŽé‘FͨìÛò–úTf˜7˜0S!ej9 Œ¥Ônß²º~æCZxX1±2#:ógœç.Íá¿ÃúÜ&éÕädž)ʶli˜¯À¾ñ‰–Ý}Â÷°¯#UszÅÔ`Ô¨[rÍÕ«ëŸjä仚<É»ü#ub$¬¤zü‡™ù{ˆÀE7š©ÜcyÕžðb9ý“b ½p}Uu]‡â€'h¢MŒmµ†-;ùY?àãkíaWú¢Ï:zÍ>{¯°“+޶Wyö¼?›†½_tSôãÝ´KÂ"Áك˧ õZJ)5bA“ƒe×10 "©çp0!ÕaÕ˶qQ–'}%PÔ‹(4kGç\ªœ»Ü˜ÍQ*­yè¾û%>PmRÕÓ›ÓuŽ^·"åÁщoî[ÿa;<°‰kJÇÔ£&X1çëO‚œ#’½í9¦šèWöÅRf¾½æ©/Gñò3÷ÂKØög½c±Fp$c,e3‚š6RÚVÕþv‰³vËïÞͺ–z«UÕ,ÉëÓÕ$õ‘ns®H”Nd‚*ÊÔ â.'pUúYw›ïLEšƒ;´¨;çÐNãò–YHÇrIR¦žÁSÕ‹a¦#o•üÕêeÃ6•¦N ‚¨5n~T¦xö¬”VÞó™?2'n”d…&§é ´~—.”NpòF³ØmzÕƒ$>s¬æ­ÈdTíç‘Û]½Ceõ“¼|’‚Wz¢‡ô5H [B§mNùÔKÿ½:X †œ‚ê[€ªœ5ÁC±àKqZŒŸá£?®ÄÏkaìÎÚ ¯YôÇoöÝøpÂZG>f=:†L/Úz)kî†ÐÀ÷Gç^œéR6U+íîׯý¥Ä×Áݼá5™ÕÁa‡‘_Ј=«/¹ŸX„«ÊôS4i#ÖçVÂçë ÀÀå¥oe|$:B-ÛO£7J(;¯Ñ³Á¦Ìi8U}á“À\ý&»ÒÒ8ròM—¥>@ªmøp„ð+xT8%ÿc…_jÄðœûd"³2 ;•Z۾Ƹ%’Gèã­aøT9üÄ|‰ü–"UÚìL‹œ¦Ëˆ6ÇŒ ×v«œŒÊ¡Gm/ayOL…sËc€U¹+R»L+k#í1ÃuN0pæ-qÙGúzERé‚]XkrØL,™¾º²-ŸÏ‡›ÊDGÜaÁĉGÝirºÔÐ0XZ‘HX©µÑi Û®¥l& !-)Z9¿ˆWŸu’E¥ØUÀHµWz0׿AÏCdÒÚ*_·wÑàóê­T‘ôBPË£ýaCU"RóÅâÏe0û¢ x¶nõÓƱe&-… K„Ë¥Ž.•ñ;Î.‰)¿ïþø0÷m#&õ{W7Ì©¹Å ¹Û}Ž@FbL¯Wɧ½‰nSþè/—U—ˆUîi±7¨u_ÿº·DÝT!§!¡1R #û4o½!†Ç·¥0%}¿¤O5ë(nÕ¤¡§ÌôJà¹î–f­åRÖ%³³í™¨_æûŒEYgvÒ{„ªÈƒÈù\„š=UFPŠökhøÅ9žîJ‡ R'œmw#%cÖ69Ê÷Ýi£þJ»uA„ä˜kC`ýí·^[†Tä­ûpËU8%‹=Ä«”UÁ(œqsCM¬¡Âh‰ñ}©JéAU¥Á>q°ÚôpózÈ­S½>Ei§ÿìsƒè¬‘ÚS6uª†U>.–tÄú“vë«s±øLÛ¨ÚƒÈ5 vQÛÌ‹]ò1…‹€æŒÂBÐú%³AåaíC鑽àtrÔ&a|8¹žs敌۔}1öK ™ñyPä㥜WAÛ0U&-ÝümÙö“}gÍbIµÑOVqQñ}j‹ø-ž"ý‘ÓWØÛßÍ­ƒ¸9b:[îôð“Ö 4Wj}ÌÑ̪n+ŽlµNL¦éÂKðŒ°¿jÐI/ÅÀ `Ådly?…õw¸*•|ï•ý‰(ñjEÝò¤ d(qø%ÎäÊSÏ“RòCDjwj·¿&̦±ÑËꆾâµ=ñØËo©b‘@è¡%NŠï »§ŸM;Ãe­âeI¡4^$NcV½pˆ²V[‰¤…ºB]7)$¢”R9JñpS) R¢‰ß²h‘øFK¶¿J¨Ü¬ƒ†©ãÂô9FYè¸vÏ&Ï–*i¦Ù=pUÿìðp¶º£5¥¢¸—V ›Ž²Öuݰí5ß/•û7eÁ3R8zy„1¹ó³(QØ£9·ƒ6k¯ägD`kJ„CQõç§ž#CDÍÙä«uA,ªPÃûnßf`B·ƒYÓ«0óÚ™¯–”ŠTïi=³S£Ð0ÒÀò{³÷,ŸrãëNRîëq' JùGÍo’6©ßW |mNÁТû†,ý_Ÿ Û&ŠØñû}á‚$/4 ÐÂ0í ɽ¸ü\èXÌH‰šðm@Æß •øè³ÌÒ€Á>’Ù>ÁÜZ4óC·CDgÓNµMQÝé ¶ÕA¼Ú'‡¶²Çéó¬®@k}ñ‘³@Ù‘YÖ*‚†á¼‚ùõeNÞb¥Ò9~~ìKõ Ò\.Æâdû K»ÞoùŠNÎòJÇø*¤»[ïUŒó8Ò›EŒDÓ&ó5= @&öΗR×ÎofɆ狪ȹX WñAÚIQqeé;“%K½fŒX4䎊‡:Âωþ馯ÙZ_TƒÎæ]ÐÁt“…RÉìß|¾Bhªóøj–dÆ*°Ž÷ǼånG™N׌™Ú3O5Ø6Ü?KúäRZ-ö)>ŒôCæ®[u–¶a5ŒéWާübN™Œ¤@ör‹ Vù"²ó(¨ü\’0•2ŠùìWê#…Eð¥?¸ÏyM¤‡ù9³^©Âi ßÀÃщ­Ex É‚?ANõâÞ|~pgbb‰UTSûû[€š÷ø;t…¬››º|TY ul ±éW•¨®€þÕ®½Kláæ6µ«5CMVÍyç- â.Ò¬h×r‚8 ?¦ú[®bhðyRü—ÇGe´Sÿ) ßà\E»9lGLUäÔ®¹”Š×¥‰)ÜøÕÒg™âßQˆÏ^µ¦¿Ø‡ÐÜ|0¦Æ¡‘~%·Ýó¹`ëÃXûÖµSè0Ÿ {mAíèâËðå×ð'OC6!îàÅÅ1´vBÇåU¬ •ÖÖÓ{;W¢Yǃïí6";8X¿ìrˆ«ácô3@ÿêÃ×ãˆaó3©Êݨ÷K’Vƒyßõ«g^J¤d ùYut›I•å:Pntår»ÀÃ6ÎïÅPˆCñHGoy–áàÓ‡F`ú$,źò4Õꀋɹ¼é32ÂÜL~RIÉB¨ºïyÆ7ϸF ³’«"5¼\D¢ôœ´¶DÜV8C©“ %ñâ:êrMÖÈl4±M™Âò°¹üÞÓÆÇêήU=«ûNË"Öâ Q¢_ŽCºâ’i‹Mc¸O—(¿Î{ƒî‡O§¼#ú5Ïï~DYoú¶D2[óÞ»ŠõÄùݽKεž­RfÿXÙ¶ˆwMmí̓u[²üšzXxqWl­ï%&•åËB —á"’£Œ%'ÝI "³B¾‘¤±p,QÄüÔï¬çïý"J»`¼Sìå‡]ü}ú„×X;YMÆö;í<¸ª)ª¾Ùr൷ì07›UlÇ»R†ÑÉNdGû<šÌ|„ͤöÂ#î•úÉ›¸%‘#‰Üs”nÿN*‹Wè.IéH¸1-'ÌklyÛõ’ªïjá†8uàE˜ê(|¦ï½_ ë~l·6W=Ãf|×â|ð>-­-Ác® Ê|Dò˜tü;ŠöŠ"÷ät.‚w‰,:! P+o¡9ÖN³L4PNñI+þ]s¡]­~5•kŠ¡UÂKQ¾Ø’ŸªsGc^ôö¯£ùßÓ²˜f&Æ–LaÅõÅ~ô0ÌÖ5ãɲ¢˜¯$òÐÛˆ–)}±D`J·²‹ìhŒ6 Qk&ÿE‹üèlÈ®„º¨ZLLÜgZèjÝÇ¿±e±J鬔á‡=O5f–„yh[d³º8Âd¼‚däÎÖ ’ÿu[ºª"¾|^–¦´ªÿl&OGÆPùF|#ÂÔR=H•ÿérˆñ•¢sF@½Eo¬Æ#]²EWÌ ÇÖ8dÓÃ2¾xšæv´u>YQƒ¢sM­d%ŧ½¯0M´ógÖlkj}O;2ƃë@©öSq[pfÇX¢¾ ‰>E¦Ëtê–½‡ö#K¯Ô5efžÎ¦me:‰ú¬0s [Z›–‘v¨¶ ž5_«Ü‚eVÂŽp!Í f/îG’nç>–Ô˜€ k«óÍìM˜ÍÒXî'”þbs®—¾SŸãF«…–˜ŠeF+ÄÜÇRÃ?J_yZtSBªØŸ³Q‡Î(§È™¤TðÚ ­fÆ]p![œ÷ÙÏÃTÁåùïù ™>ØøS’STE•ö û7t:µ…BÒR‡K¥Çðì ýŒXÔlº¿ùÓT úžr›‡ã#lS{"¡J«vlÇJˆËsÈ2‡âŠöz÷>S"¡cõnϺ|êtøðà ™ÉÏ^Ój–Jì¤ÚS&ÖN‰jC°Áò“\4Þ–)rñB—Q•§ñ4ª\ήª õ‹NZóM=ç‚¥xÞnþšå© õ+ì+øüRÂ+ö>]ó3Íàâ@ay»_çE×û¨昌Í+~)ÚÂËÑøû£œ*ÖDËe{¦ø&a,Ú ÇÓ©H½ÃÉóÂì$l¨VNç)wWjÁ•ÌA—²{!„öõ¯rêv’÷¦Ï"cÑF\É,‡¼ò¤:ob)kpŒÆkë·0Áþ¢»0Æ’ï߈»æÈ1¸lB »é ˜‡eJ(•"Zû—$ ùRÕJëD¤`=|–×&˜ó{¦p¯Š_æ¹Ï‡FÜÖܨ¿Uv*[|çÕ ¬ƒ…´&d¿Ðˆ°³Ã#¬|;£ùäíyÜ»¨ð+I æ.&ê¡@ѹýçr1ˆ‡¥¶á9—>ãóQ|¤t»çaÖØ´†Ñz©„ÖÚú_¯X†5Ø_+Äv¿¿;^>ýÄ@ŠRi ËŒ|[ïþ¬À—w‚ä–E2 VK Òb*pF[ø62Ç]‚:\äÀ8‰"äž=ý­÷}ÁGð³œL†qz?NFöXEœºé«¢¬QΛ©ÂéZè/ûŸ{îƒ:#ŸÔÈÞ€:¢éŽŸ7b€ 4jÈyT36Â0¥<é<ª:úž#Ÿ\ŸÊ±øUúaDå¢àzq°#ï÷;œÁb '}¼ö :ªÁÆÎ(u° æöIP«âž÷“¡ ]ómÞØGzÆ.¾3žx á’BV ¹Jñì†]¦ýRlå—#ØßïÊiI<[úÓÞ›ʽ‚A!R*mÄ<>)eäZß'À¯5|Ð?/þ,vhž‡wr““ÏU%’³lè‹1¶Ý)ä–Fñe7dh¤å#ãZˆ`U[?Æ>«¿ˆÎ77LŠ2Þ¤|³ nÀIJ &Csþ¬èvFÃ#TÛ–³O¦_Ԯߓ–&åû]7æ5J¶“Í Òíf«YÊ Æøª³ÜI\`·>ÿ‡ãgúš2D5·èze$y«Û?ƒ¸Û<¢RÎ57SñquîIÈ~hÐL6ó¯<ñ¢Œ|ØXXÍÜ_v*5¥÷v£<$e[œ’ÞfrKJŠ2ÉΖMv̉¸FM«EÞz ‹¨dâhuÔ1ü°1ºJDðóè‚>"Äd™^dÒ~@81LþU6ÆšÅ<ÏS™>E­…¹jö4OvâÀYºÌ0eÓ›üƒz•^vVeʬ¼—@µu"ãÀŸ«ò›­6)*ޏÙÍøu×<â.e/æ,|V1ý“§ø­‰R¶‘%*LïdQ¾×x5±[:Ð`±_¸š62Ln"•ê?` Íl.î%gò·Gdyáµdh[ªK·¯f‹ƒnN¸ÝaŽ_#Í¡“º/tÒ5ð|ÒÚ>éO!¤y2¦èX^1^C¥f¦é]OÒÞš¦¬â£“ÎÍ ?À'‹oÜk}S…ñãdšÅù}HøB2»—ðþPmþ¥¬?s(É'|ÓK°všóS¨}ZéIDÚvIµ6$žè%K“P&OŸ‘.M›ÿŽÕ÷ÕÀÅÕƒCØã4GN[yOå„ùc <¶ƒ‚C©GJ†¢¨<ö‹GvØ•çXû¶HÌêÎu¸}Ya§— Z“oÝ„ŒÆ:êu4ò‹¬”J€Äí§é ÌRCåšxÙæ7 öü 7Íù=-=ËC×Ú‡38: óú·¾²Š MnY¦n«ýKtûô”¤ªÃ™‘Å7„7½ÒÀZ\ºìí5..Þƒ0“ßKôÑÜ{ÌH’¼‘ÂË‘ ”`ˆfáó˜|g‘ª®èÊ´¤í’ƒ¼ªoÎ>aKjPz)(VâIÚ L$ùœÝ•esOÌdúZ‰çœÐÈñ_c»¥{ïÔIœ‚-Ûæ¾òÔ°ÏyJI §PnlàÃFö"±žO@ál¸¾pŸ±·‚YŸ‚ ïã޷)‹¾*% •È` ŽÌ¦U`©õn¾Ÿ3Çeÿ *í’Å¿™zäàÏé=Êó±ü hW‹ù„}èZªnDô­¿ŸcHç¡Bl¸k‚³Wë>â3RouŒú¡‹€Z‘ÀÒÔÀ‹ÔºØ¡<Ã;ÀŠGxnNr› Rˆ5{kglÛö¢‚¼Q&·ç0d8æ!äÅzý‘ZÀ»”?iªJH·a£Ë’n9q+÷.ìÞsÛ…¨ªé›…6Þ¤3/A&ç´tžkÌ¢/8ذ'"ú§ˆe…ûÇ(]b>¼+Ñl±˜MuMüo 5Z)Gfû5 âJ)7YoÎêÔqE)É£t„¿šÍ’Ù¸SðÚíØ,;î·U¢ŒéÖÄD²á h |Òñš¹¥(Fí‚l–Ÿ¯dÅ7'6€ôƒMDô·r˜1J \¿Æ¤È®’~ ð%æ¤Ò'¤þÄ3ã´¦¼Q1½¦®iz×zŒó¸sÀøÁa)¼øÂµÝ«¢Ü­$ZJì<ßò°û®ýà{ˆ®’éÚˆƒóZ;ü³o˜s4iæ«!‘U\šxä»#‰ÈÝ·pÚûÔ,åÒ5ûKÕ5S›vL ª-H8¡?Z1š,óäû–,£Ûæ‹@¯©ÈŽüÔ º0†Eßjø=Ú)©ÇŸÄöY™àútêí ¦…Dé€m‘&áõ†©MNµ]Òe»X²1 ±"ö¬„§8ƒùƒjïL_òyó¾.Ð ÅEJ\ä%Ä8ÅeJª<3+v‚– È ìL „dõ±Üö‚›!t{˜‹}Àjо$<–pàââm3ÿåc é(£ÕÌÅŽ3.yÂÚw¤¡ê®À-£ü‚î,F`ÄPËëÑV†ÚëE=$,9/§qŸû˜v€”¹ µ¥ÆûT¹Z±—biÕ)ß³Swܪl™ÉE—‘W^z5’ô Ь¡¢ÎÀON½nl„Á8ìgšŸ¦ùñÚÃdW¡ÙË„¢|ÿmz†´]wÏ‘|QåָÿúzÞŽ[̆QÔ&'íÎÂéö˜®Õ@®Ìrä€Ðù\Äç8†£è0Pq£ »Ú-yˆ4ŠÖ`{ùSîÙ¿u¹€¤ôÔ_ý3®w¨Ý§`3†ÖÝB¸Ó:šÆž˜a„½îú’e¹4Ø.÷“v2½¾ÂIg_û|aUâ–,ý[3ã/ž.¶®AôkÃ2E×jMwßš·s‘ƒBŸ~2î%aòø¥ž®NÛ±ð£9nß„½kñí|ë‘AShó3*©Òñ8Ž6´~Þ‚ÛÃâ|Äøí7ïöwþŸ¤eÏÌ.7ÅÝ ã„/<ó|q±Ç0ç§YŃðÒ~„ÍK4W×Ö+q‚Ë„F÷Á¾®:æÇ·H}”½Yã¾ÚGÄmÙEn<Çü€‹A¸j…ÌXGâVØ~ºlÔ*Ïy!j=‰²Æùt³hîo§'¥°Žø0•ˆ0W‡mCFÒ·šKÐÀ/N;›ôŽBy•ïfu{î#îèû—®EO'Ýš›«9ð€Gôy &aÔæv„z+ƒ6ïå>1"PŽ Ç°È¥Ý¿¦4${¼ŒÑË,ŸÐ/5Uÿù¸øó9›¹¤cùWD uÐq€[“V‘Á™gmÃjæxÚÍ¥£iFæ½q)oaeê ^¤ŒÅ _¬?ñGUdq”|&«·”ˆ5½~õ Sw'³vv—ŽÏ«'®¦mOæ[pgµRõJ+½^¸1YJµZ·ö“ú讽µ’“kå>°&™ , o¾€i¤Úã÷²ê¶ƒæj]S:ÅW»ŒÉ²4¨ÂðØz©É_I#R¤k|鶦Ð' ¤ðc9v3_†NE 7•Ž\¶x±ÔÕð¤X@Þ¯´–<®ô/5xñØõë‰ÏåÖ‹rôáp'q6‘Nd¤in·”•ßO7lÜ âìê`6q³¤T7æzVrë“$Kbÿ˜·æíï³ø~šüŠÓ„ö½«/P”ªLzdƒi¼¶Ž› GlöÝØOñ¸ç3ógm"™„+ýˆuÓ¡.‚b§™$²o(JBþÖ{tsîÀF ±¶Á:Í”¸ãbªþªÂZL —…ÊeSíZ¡aµ•×ȤŠÂfÏ㊛)îQï>´ú‡Cg©ud±‰[† Æ{Öò»55u ;–}œb2WsºÒM=P¼S_è§ ©ä˜Æ›^Ö8íW3Å8µ8åÙé.QžK£Ó‡¸Sí2a›š‚zÚ¯jµ“η–õ²£å–×uJûªÙ€k—%~ãc6”{| Q@žæˆ=¹2ÑWç­«]\Ñïò/ÒTHHØÕ¾ù<ÕkFͱ`9ê Êcˆ: B& H'ÓX*e—L>*ÖL¾xëᮾ@|Õac24ã»Å`!M$¨&ɽÀšMEm2qü%X”n^AÕφÇÇn?~ò©CV œ,¦±“·Äâ˜iÀ{=á]̸úà0-Å«´E«[úâ ÙM3é-ûe`ø[ÕmܤúÌO„—pRö£¸Á¡Û×»¯"ª_´ M=œÂJ€÷ïvâÙÃf±ë á=°JÝQ Ô;bŽ3¨kî'¶ïxiƒRÖ߃y™?Š êô¶yׯóI¾‘$iñwŽô}£F7Õ–'zÏZ|Lئpaןˆ*"¹§!xí<¶ïô#ª³•Ûým7ë]Ã=ÚñTüÓØHàÚLÒ=ëŒI›9WþÆèÇÌ9Ü÷$î¯U ÇXƒÕX+'Œ¤o‡ãºÁàbYòÚ…=¦÷"•ærñˆ¹‰Œ§g¿Ìª„ Mmb•&ù€ £^oîØAe¡¿¼»{™-om´£ßPÒ(ä( ÁO?¨~m˜x+"À,°€ì 1#¡PËg Áe¼*:7rsýÂ]éZ¶P¹ë[ܺ^VF*°&u &)Ÿ|XÃoƒ ºÛ˜ÛåŠâõk;ù‘ŠrKq+Ê}æ…ÐèÝNéÔ0¡—s\¸«Ú–$–7û²ñÖâ¼øköU)Y!zÍËûâò@«RNu$èNgíá•_à¨{!ÝKEÞ5~†ZŽO0gœßñÀJ¥ü+6òn8M98žþ\¶!RÄ…D+@Æ¿•=k´æÙ5Æ:ñll”SCJ2VNÞáÎH¿§iCÊè0ÀÂê.çqW/Û£}àå;ûÎ]¢–œR{ðƒ¥?÷íwçNEôF¥[¾ù[‘ ý°#‹Ðäå컳(>î,¯AqLç!­þI^XAŠÒÛ´Öý5akqë‹´b%¢ØÅMõDØÝ–!ñ¬š©t =ÇmŠ5ç‹ð~¹°–.ì‡Ã’”ÐÂ!ór&E–kiLÞ„ù˜*ÇBÖÞ/”ŠÚ–„§«Ÿ‘b<¨¢ŸƒíOT†%E ¯v¤‰¢¹6é2‰.Q¼ˆÀ›[ßùdË_jYRÜl:ÃÁ8r±µ—$ªDlÕ½9ö…Çÿbò"¡˜o´·7XŒp3AËéô’$›‹£Uÿ¨ó“اºKdjÊí-®PF~òvºà©ÙbïØýÚNÑ^vJðÍœj¸à‘ØÇÞnTgaÌçk'ÉCt¥ æ#:žbkHÕJ¬tcd ë­5ríïÕ:ŽŒÊÃÃOŠô¦8¶ðøa<òeÝb†süÊÆk(\G]“ŠÆ@ï>&ˬJùeT>sKÍ™Ò|ø;ŠUKô¸Úp˜æ2ž­Iz_ÎB%/ëù›¼Å<à(uì’Å®YÔKde˜O^H€¯–Ý Œ‘†8ùr½– G…"¦[ÿ®ëù)}ýësæÞgêÚ_I‚NÝ& Ñw--cÎ?¿¸Å".[V†<ÔŽô-œcµEL¾¯Y*®7 ‚«j¬íÿÚúÎqӸѤѾ‡ óýg4ã´¬÷Jó_q6ž¬–B, ËV>Y+`,ÓõÆñÚ5+Ý–i33#-<íÉ V³œÊ§>\;è)äDýB.pÝ‹HÝ}¹ÌDz)¢ª‘‡¯šaâž(õuÇ#:>:Q%öz ó €Ž]´„i,‚躋в§¿8ÔEe ©ÈÄäd"jæäRòð–`†s±R2! ‘-6ØI"]mÉîe«§=ZÛÝÅm$”‘xu·¾HZ<ÆøX9µs•û0ËpðÌp÷6Ø(…·ùæcgŸÊçOå±ù£_¸îŠ‹oè3sýL ¯ÕsNQÁ⨊?Ž”v®_|ùSeœ~ú±çaŽÓ ÑPù‹ OVÍ c\ŠeŸ‘u¨ELé{«Ûörúˆ¢yÚ‰ T^6-Çg©¶ >¯”nå‚mû¦@HŽ‹ˆ¦n@R{oÉàëá™×Û·Wx Þ,5Ë}n u^æd…!}„¢]”Ͼ! ÆF)ORx*¾"Ë[êZò[®¥'†YòKÎøaÙßô<jµâ0q-g©e–[÷§%Eò¸˜LƒÒÊ™?­PçëŸEÍ^.1=–TÙ°ûgŠTò6M©­GÔhK}Ô×ðâ°á¹QˆS:e™çÚŽ<¿ØŽoò‡ÅØD$½NÅ&{P&d5%LÑ N{eÐ=AižøPî0ìÖ¿Ê-èÈz?Ôavp|êÛ˵¹Xvó€úÕñ$NLéšíÿðƒúÿü?‘d 6qrØ™8Ù þ¸¦µendstream endobj 163 0 obj << /Type /Font /Subtype /Type1 /Encoding 377 0 R /FirstChar 34 /LastChar 121 /Widths 386 0 R /BaseFont /HUYGLR+CMTT10 /FontDescriptor 161 0 R >> endobj 161 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /HUYGLR+CMTT10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-4 -235 731 800] /Flags 4 /CharSet (/quotedbl/dollar/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/equal/at/C/E/H/I/M/O/P/R/S/T/V/W/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y) /FontFile 162 0 R >> endobj 386 0 obj [525 0 525 0 0 0 525 525 0 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 525 0 0 525 0 0 525 0 525 0 0 525 525 0 0 0 525 0 525 525 0 525 525 525 0 525 525 0 0 0 525 0 525 0 0 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] endobj 159 0 obj << /Length1 1853 /Length2 13226 /Length3 532 /Length 14261 /Filter /FlateDecode >> stream xÚí·eT\Ͷ°‹»{ÐÆÝÝ݃»kÜÝ‚»;!8w!¸»{pîðõ»÷9;9çûyï¯;.0z¬gV­9ŸšµVõ€’TYQÔÌÁ(å`ïÊÈÊÄÊWPee°2±°ˆ!PRŠ;]­ì%Œ]|V^^6€ÐtúããäàãdC ˆ;8z9[YXºhÄiÿ™Ä µ:[™ÛŒ]-v ¦Æ¶5S+ «@ÔÖ úÏ.U  ÐÙhÆ„ÀÊ 0³2u˜-¬ì˜ÿQ’µ7wpÿ;lææøßCî@g€æ_𴤙ƒ½­À hŽÀ¬èª¹ü¿¡õ¿“K¹ÙÚ*Ûý“þŸFý_ÃÆvV¶^ÿ5ÁÁÎÑÍè Pp0:Ûÿï©ZÀ»)ͬÜìþ÷¨¬«±­•©¨½…-Àòï•‹”•'ÐLÙÊÕÔ`nlëüWhoö¿%@û—³œ´¢–Œ ý¿÷ô_cÊÆVö®ê^ŽÿÉúÏä1ëuÇÙÊ Çj/+h"è÷¿¯ þW-I{S3+{ 'ÀØÙÙØ ôô€ˆàà °²7z€ž af&{WÐ-POüæÎÿl(hÏ™Íÿû7²Ð것Ðö?ÈÎ`vrspš™Øþ{cÿ3Âû_#ÿ3ÌÁ`v4vÚÛÍÿвþWôMe7u°³3þá0[z9Zíÿ„¸@÷‚ª8˜ý q˜]l],ÿDxÌÞ@g‡?žƒ=ð?Ì òrõø3Î 2rµtþ5ãŸF8¸9ÿ üÓ +÷¿f€t]@›ôɺÝÿrm3ð,‘¤joõ·Ï?k¶uøë&ÞÒØYýÏ((¹è%ûC ¤â”Qâ²Iþ‡¸AË–úC EKÿ!Ђeþhµ²´T¹?ªþñª+ü!PuÅ?ª®ôâUWþC zªTOíê©ÿ!ÐÚ5þ¨ºæU×úæ?O/ÈÅä\Lÿ<Ø, ³¿Ô à_øÏîÿ… ;‹¿¤gù‚üþzeX@‚Ö!ÈÉæ/IÙþ… +»?:$˜íÿB•Ã_²rü AVN!ÈÊù/üçqü AV®!ÈÊí/Y¹ÿ… +¿Î•ç_²òú AVÞÿÂÿûsðôad½^ –ºÎ àåâõûŸ35쭜܀² ×’……›—ý_QS7gÐ áú¯oÐ ûßln:@O )Âò‚ƒ)¨uzsx¹¿dÑT4¸˜EK‚bÃÙïˆ!K‰à¶%#òNtõÚO•Y˜(ûÐû$/.Q¾*ãRAN óoûîFûYÞmÚWY ^{Žd÷!'¨Ís7§œàJ3£å):_ûsœ*ÓH¨À®‘‚õè¹7öd‡rqkKeÙj|«§b'UEËp*àø¼î–’µ>âoý®•~õÒ¡Ó ã©® ùMÿ;Ý´“„]õ–êðiÙ×Ïh¨uï}C5"Ù 5gÀ>ô œêˆlHfxM®7¾ä§é߸’ î mÚ¤¯”\%»ŸØé?Y~•[*fùTäPKýçýv H{àýÒ)Ÿ@±xዚìZ«©O« MŠÜfMŽ«ÛŸ•=…åÍŠr“£/ê@æ(œòîã&’e êWâ‚`µƒöd-Fûâ¯d‚ˆÚ7  |”‡›×DüQ¾O×™™8När[,΋©fK_Wy6F]áeFA·›cÝÊtCDµ´Z­Yô‹ÐnPŠgè§9,¶pa]8’±F¸‹àþ7˜2EI\w÷ýŽFº,ŠªN¡Úoþ·2¥3Þ±g;u½úξ™[J`ÚEpÇíýV5ê;Æš ãQaײE‰¨’ŸPÄ êÖÜ]ï¡øj‘´¤_i"ô!%›á¨Õ/çjóþR–µa²â“#C`ÇøUu‚ŠN"ÁåÙâJ Ó€{7˜N öººI;ˆgAì<ûJlØãÊ˧%±\*uê­Ë<Ž™nû§Þ±>d¡ëú_p¨X¡¢í’{S?î—D-Xjäw_’‰Ó4R¶¸”•ˆû¡&¾¯<“ l•‘‘kÿ¸c²yÈ—úlØ8œIš¸å-[b©¬i‰´É‘jIïõã«âÜrÙýb| ÃÙ…ò )±ì8«gA£óôãû@|@W§[0¤mC2¸qr¹§àT¬™d»âËgðÎQk}_¥2³0”yìï'u­r}su2ý˜ÒÃÇꈋÚ,—jTÃÆñsˆ~!µÛ’é]Iñ|`š¯Êq3n|‘Ç*ãÆ§ ѼÄë®ÎçÙÆ“&´‚Í…ôÃñh¿41êx‹!E³C@s¢z÷]šßùPQ‰6J°K¯àUÄŠF8èQÔ®„²¼¯€UÛÚ†ìøñѺ[¿Ãz®eI5‚^ü,§MS—9¼¾‡[Ë_óbn4É+€¾³c>O÷ïW‰C[|¦_漪ÁŽ$3Ÿ¨ÂÞ¸á Y…Õµ:^œ9Vcn}Ôt%:{fÃ6ÀgýDÛ'o_¿Ê$I â{îÁ°»åCð°¾_À·#ÓÕ­"@x]ÕéO"/Ô<_´"ž"³_¾#ÐB_ëwÌ»-š˜Ó¤©Â¥Ù<ЇåI÷Ø’óñçsÄv°?˜zù!f«à"‡ˆ?ÓÕÿl‡æ«ÛzÒ«­„ùE®:W#¼{‚È æ“`¸ŠªDãÔ¢÷c0BrË0à]>Öô#ƒfúΖ įqŸ¬V®xüÜŸX“‘|/>Eekµ{²Û0¿%Yc§Ø-–”q4ê”q$/ýÕ} Sb½e°®˜èˆ4t/m5:’rr΃û í§½Ÿ;* ¹ÑV·+¿ î~âyOÔ}87úÜ~{,2Ý/ä„4¸;èt÷‘8³áS¿?\yŽ¢uÞ<üe˜=í ãp‘9ARÛ_eÆ:‰¢,²áÀE«Ò¶êÕ=#£!UÓ8Xa®f4ˇ4öñAž+_õ—”³€"Uä ÂaÈJA"–pÇw:QQ¬¾™ ¡à蹺Ra¦çÂlغ`{¬R¢4Qö$Ò×aN?ïK˜=|Ñ#..ŠØ9´×ÉüM¯ß,KMFjKY¢^t†ë“ÉŸ(ý оÂh2Höõ£b]úë”jwÑ8/Ë&Vo5k RJzˆåHù yËOR±W»„ ®ïl(oŸŠ'A ¾q"YÉÊ;ëœryaqø„ì›W‚J†p¥Õ R’Yl$J׎8Z=Ö9x¦ü„ 5F±²÷ÏÌìCWs›ñtî^$;·…v)´§3ñ{å¾Ù—’„8lyF>£¹ã Hõ²šÆWŒÙ>ÒÒLjxÂÌÆ«w¦?nÔjQEí}Ó’=¤<ØZ¼Ž§(ÿu®pº{|ºŠNU%kIwc认iåœle©ù¶cwIÐUµÆh»ȯ:ºg¤ª3½CYÊG0\Xv…9ñÅÂ÷ïgƒÐgd&Û9sÅf"å/Ê) ebi–ÒèÉJcH5A]ä èºå¯,)ÅÏz6N PÚkd ±S¸;Ñ,‡eU?õDOfp)s˜'Ó™¿Ò!5‡²â¹D Â~$jÚ:Ñç˜vªÚP½ì\°QâGsñÌtÂ>6D†„êæFCöÀ:J) Ri#ÀÄ|¯[e¼}Oý²Ïph\± ÆžÆò–R²Œ¦D®IèQ…üXÃæ T’ [”ʹïi¨à¦ó­N¬Ûý 8ð—N =º3<2}öÈé5 ¾°“HÀfŽÒôôÀK–èy\cÀ@Ù‚’üÐ×Û¾SCañ–Îãí šes¤»Èõ.®$FG'¬QV–÷™(ˆÉ€cXLËZ“97ß±äý)†“IüDc=¨Ä½¸À¼±#îÄzÔÛñdò¹sè×á·—ülj&XÚ­eü¹£=ë(øl µ)ïZì—@Y8Í…ë X8»ˆž“’Ýs³Ç΄PáÔ´yk £jªŽ,u1´ r«‡ºO²§ÔMŽ"œI½ÊŸYœ°ù`¤´:§UXU¯¢‰QÕ§og’ˆñ¾•áàŠP¾ÃM%2|Øzà5s©ù”‚qÇëLLª¾s:EÞ„cit‚Ç5Æ"l~=Sò˜—þ<hó¡-4GxYÙJ$˜ôFE…æËH­Ðàu|B^—¨êwo {¶Ü%­–ænŽÝO­Nª‹—Éà…äõwÁvsÈkùxfrÿ¤YYðœmxÿ…0³Ggø¹{?ÀåØc[Õze9†Rb#ž¯óh¹*ù¦ ìÙ[/_;ÃaÕÌýù |ø’I努"èk)ëôG=¬ŽEš2 ~}ÿxR[.AZAìob¸;â¸U˜‰¤Krß‘J;Öéo'ˆ»Í{I—0¯(!PÇôîHjW½weEuB +Ã×À ¹Ÿ|È#6–µ[KH{#ê¬}¬ì¦l³µ‚s%C®ÎÆL®Už}§ËU¾‘¡OÖeb`9c¤,D&óNí5 Z b4f€°Ÿ^aNÖiÍô:-7ªPm,¿œtÅóY]ïIÕ¨p²ëOÍN~~u¸â‹Omvf¦V\Ûà ?å/ŸýÝò1»9³ˆ°)\?©ÌèknÖ~æËî?ø[yK†N¨¨S"]hyÞ! J ¾ÐŸ,Û‘–Ä…9©±‚¡Ü¡£"M¾[aü»òó* RmrŸ DFbô€ÖaÃ.®GH”6vyå'8ºj‘Å@ÄUq›­èbz ›™E0ZðGÍ+ç ¯Hn œÀÇ^á!£‘Â0‹FSvI*សœûT ±f0žX$C[BÚ¼+¯Ÿ¹pÍwuísÑŒ”Ke­."ž™ 6š¸`³jH¾óѼz½ÎÜóÓq†U¾6ÂÌæ>P¬}¿(»SM-PmÀ ¯ÎŒ ð†|å£oÀi¸½Ñ³„y@h^ÈâäΚà5‘fWÓe÷ lÈ©/ôrêØ”/µÔ] ª¦dªg’B­¦_ É­tÌ——Lñïpµ¼ï¦|gü:¬‡Ì]s†¶# gXÂÏ×_4.TÌÇ*)ƒ*ִƦYY¢ûËùT¢HXrS¤ú®,%íÌú @Õ^ýÍ,[Íù` -ÞŠK%¼0•m‘(õ«“¦ÒÐÔÓùËÊæP8[­‰R3—5>‘_rÇxS<qeÜÊÒ/‹2Huô×Xc"~ã÷>jÞþ”ä 7¥O¼ÔiNŒpž¸¼!,kOãkkqŒ/(×&-Y#Ä*¹g“RB½‘fÖ¼Ãô8²èé×pBÁ¶ôä#úD¨ÓôšyuM•'(ÃÏ ¨L€ÒoT/Ùuø>O| /裶?aqÁnHÎÒsC\¾¥Ë3‡=0ÔP,‰€±åôúˆ^ãæŒ³<‹.@kØPØ}n亙YnÓªâÃ_û¸†D{e`ùæOB4y*¬I¹/j9ƨ%À×Îÿí2’íR΄×å÷ݬký $딳YØÌLö¡.9bϵòؘ+¾ rÞ·»„O hpÁ:F¦:Q+ÄPPäÈ:œÂ1|·ˆÝW¦‡Á1~HñA >qú¤ æq"#†Tc×´;C«"ÎU*ÞŠ ‡Å†äxp©Ÿ8 ¶ž`õÑó-- R÷z¢¸FÑø³êƒ¢AÄFþ…$nœ8nÁy*fBNÑ ˆ5y*©šÎ|°±9ÉrTßbýE´“œ½~ä_B_¿Ú©]T¹û A“e-@#û¿b~y|’Êÿ|.V¡Ô˜Œ ibãºp/&>þ ÃãªÔBué‡ËQû ;¿þà[ß{\‡Žù‚ŠùžPÄÚò¼Ž¼Ïñ®Ø'ø\Ÿ[„QËV<¬!= ?õÌ~ýÔœ>2‹L 6‘ÝÊSNß¿F´òÌÉèŸìÃðc[ûÚAÚ;x©Ë@î “³P'“øL¤p_Ú9yìƒä›¬ÚóáàTçyØŽdx6Ÿéæ„W|Ìþ E˜¯óZýrºªæ¬zEÿÄéò&û—o! U£Ýù([SÅöfÅ2½ÎâÁ›ºöí¾¸›ÀªBS†Ãð°7šöÉÁçtOÆuÁ쌯ÂÔ ¢h'ûΞø/îê#ý`f’å¿KêѦó8zC>í7G©ÑZÜÐ<&cÎíÄ`ñ3°Ý³£ +ãâòßJç ~>ã¸Oèoª.;?ÍÕw[¨ºG5\rÈ®K7öT“‚^mC•Òò`ƒÕb:1}˜ü‰ÖÑúã+}ÖjoŠ+ÍίpÃ÷\ò´Yü1T ±GüáI±éFφÆì6:–!)Gáúónöx°ðW™/úEÇ e$9˜«x¨yâ?Z–J¤jb/2ºZu¡Þâe<ÊJo’ÒeYúo53ãO´V/â¤kªKHC —°ˆOÜWÄç¡5‡ l2“¿ÚµGp}‰P†W¶nO»j0»Ít?î–ã+§% dÊÐÊç§P,ŒÈìDéÑ?TV«z €+U-auØKÊGe¥Êt£ž?‰`„xžù¨òììJáÙ0ìhí[u<_´–\`"  ¯ÇcGµíŽ ûbl†Ä"9î’…vذ‘!jI”ÐLD¹üÄpPYr÷!`:n‘â‚Pß 1NÉEbk•‹¤Ìõ[ŽØÈhZ­·Õ ÖË[¢E9#`ºÍ9V!Nï’C–CÎuc˜‘¿âíúÅáC3#„qyî´ófî4Æ&G ûrÖ@ž4tßࢳ¾7Q3n¿ÆóÞN4xB ½ªD˜JBÒOü~À½¡­~“iÌ$3„Ñpc{1Ä;T$û±uQ×È †Ñ)ï&&N&p"è—„‚7^xD*7 ¿ŠÑv·¿ã–=Ú0ÏbçiŒÔ—!l©ßɹåSHæý $Yz4·ü鉩ĉEqh¥©ŠÏÜÛÇýÚ{þ®ØˆþøOfHý/ö·³»ºHjÅk']Iò«aõŠ`Zûü"!cy8cB¶hƦ§¾aGEÅeÀÖ"výÌW!rèiêØ,ôÌM¯0¼œ(Ô‘Jwœ#ÍŠäB´—f|Þ‡\O÷.kÄ–0™-¼î -5LtD|§9[æ5†5ühv¦·‚[©ÕÓ,›LÖ‡T’‡´9.;v²,o› ¤GOX%R;«L³Eóq/w»…%iõ›Rsú䯽MeDý’[ù„®”A+ ú±Òøù—äÊ«­ËÛ•üù¸Áú-G˜µõ+­ŠícŸ4®w‘Åñŧ*2UÞm!Ýz#Ø<%,;þS×4–òPÆ<ì6{úd˪$¤upÆ÷KJœ‡9G»©Ùߤ½lðmÕçªÄò+HTº|Ð+‘FÄÔ·4m~¢µ3ûó:Øp'ÙÌ›äÍ 0í4;6P«ßiÌPd›Vkn¡àº•N„ÊZ.Èôy|ÚtúAN\ÖÓ¶¢¦ç¤B»™Êª­-*:Òx†Ñ œ*B…ì¥Ã“œlücôšUD¹ò·>¼žå/PÑâ+»²6®>6,ýˆ ZÇ,ÒäxÅþÕƒt¼!F|¡¶47G×öawÈÎ$¹z>2Z—Ï'0Üx!¦)Û³]Qí¬úm5ÈÜm¦O#$3>vß‚x°]R?Múú+#Á^éFf†[@SÂ*ÀŒ}ªf%Nr!ºU…¤…slöj±Ê†T¶*@ÕCÐö‰“ ²µg¸_íáä6@ÉÀ徜ö¡¼ªû]òzÉ wÏvó•+ñÃÐàÔÍ+u¯ 1>ìM@’·80¦=á“íCŽ”Ê>@~ÙÕësaô4ÓªÎ;ùÊßÁ îÔ+~®aIkâÚhâ½ÜÒÀš>¿ê–JMDÞw–ãTK¢0n§3’Á,o•ÔÁ%³ç„Æ-\OO akZ [ Ü«ñ,áÕO–ž9!ÌU.^ê<*Iö-ªE)hg°ÉÝ(ù Åy†•†Npf#måº=©ðÁ9©õáÝ*F&Óf°_eÕ¤/å;NÖy->Ç>J,®!?K1ø¬î1óüi þû“âŒà”«HЇ«ìÙf³›,*®¦¤:}’Ä"ûòÄSœÜùÆ6ñºÞö(­™u¥jvo¡ïj6„çÁzðiÙJ)wÉFHA%Zs¶ô0T‰ºP…!‚Ï^ßj‰¢æ7U²<‰p¬b˜r‰ŽÌ¹I¾$#ûŒ½¶µóÝБDK¯Ò¾ÂdáwaŽV“–RÿQYÿ=kÓøþ•¾‘\þHÅÔ0 G ÂñqS]ò8¬b“tômÚÛZË+Ó‚ÇjÍ%ìªÝÆ Lñ&¬"9¥¢\ºÇDxË_¿$@9³30J±‘uç) ²äÇ®jƒº6ãGT ~E+¢n×¹[ãuì^¯ò±ÂÂeý½kº+ûQ5™ÿ‚“ñ©‘Cú¢HÇv€Ÿ‘ˆ¡˜‚^ºp ½àÊ«©¯úªš…Ñf$/½cãˆ^NþjÌUÆw ²F\n4ººF¦Ì>oºÊ½±°êˆ!±çp„ò+äÀúª¬åYІzs ‚QÈ¥gÉZdòA¾ê»To]í&øž Ÿì!¦”*ÉymŽ.Di0¸'Xég”»$¤ÉшuÃÈ÷ïöøm¢ Š-õ†yXè\ì¨^ŠìZ«’Т‘]±r¤Ù»ºšC:a yÖ¢uÔj?|MàU6Tò¹«ÜN¯Íi ø¦{hÞñ¹Âo¼ _~—%ñ­øiûøu‡e-ö· óÌ×°S$ÏX3žEA«ðK[‘}´ËB§DPþÎÒsµr€ô=/7V ,%ÑõZ7NÒ"CD´ŸÌ£˜ÙQ¹yhîQ˨+F±®µÁøKcî¤+wo‡Óù}JšwÜ7©²B¯onÅÎµŽ½‡mŽÁl)>vÖ?ñˆ" ì%eÁe:¡8Ó½`GŒÈC>¬ß¯Q†)u`TH»L4&ñBü Ì ‡–^šþÊÛê¢I¶³_ne’ÛG¿…s‚u€RÓ³„;[Þ*|݆<êÖÐ)ÆN)d{¥p‘ŠZ»`¢[ˆsrÈÈù{8@›{UÕ9gëü{‚,¾Yè¯c¯c¥ŒõšùU]A‚¨aŠÿ¹|%5NÊû{ع‚ ±GT(»“m%/Z`ô™û¯1òƒHÔÒtáWBò½®aá•¶ÒàOÝaÝwéèt¸ ¢6xñJ£©À`ÊTiëqø´Óëp÷Z‹©W㲸 z½ûòÏ|G‚ÚiA^ÜÖúptd¶ýè•j"&Ãû²ŠùÇÊ ÃmÕ ÿ>C8¸O¢a }ЬÊtË.½ä,P«°—ÏìNíu÷°sV9W˜Í:xBËBi»L6~/#fc$Œ¯rÔø<çËš½fuLöTìÖÉ©5òÏ{\‡úWº%h³÷p,{Z_yIRÕR‚Ñ~ÑÕ¢«º1?›¯ÊOª`´…æ+Ti8¢õ§ ²IjÎd„èG”gòæˆdVŸ|G+ ƒ°ÈšúõÜ+z¡þ†'®?k˜sÔ¾ìëc2òG` ÔW=0EB,£b€§“ý 4¦Eô¤Š‚¦pcš b¥p\Æ­ˆOÒíä=elð6òD,mo†_9zâ=wÐ#Ãý¨*›àl|&YxAÏÞ!¨WÅ„³ Ÿ? 7U^µ$0¦›Žˆ\ÕXˆm0/åPÁQÍùINáš\”ká``Ñ‹îzwb«ùùgŽ(1ÕÎ%¶úHîÖyPü°¿º8³!I Eïý[³’^N (D¤-UÝBæhP‘OnJ¥R‚‰Kö^®M(Cba}Å–<²Ð£üœs°ít„:/ë’b>ç†DÓƒÑ [RWl„Q“ ÑÁ–y’U¾õÝØÆiäûãñ™X}kÍÉ‚K¤´Ä3§Ù¸6_‡ åûÕíŒëÌ«9®už„#€¡ÓhöxDÝ`—¯:lzÐ7-üÜšI<Èž7ôàÎÚÏÆÂú¥ã#ø`¯Ο±¦2œcR™0è& ?-•ˆ&GðüÞ;ˆ'cÉD¼o±A&6’¸ 9ëc£4ÃÎYH}žbb»„ù˜“Æ>¸xÕ¥Û'jÂ=ñbgæidûdôgÀKÔoWÖ8NÍåGþŽþÞè")Q¬k÷P›@hŸ`Áô,¥<ÛˆÊÇ-O‰ÍÎU1Ú'械t“~Ì£¶AÕN6qòÉüÁ JñçÙÐ:ü=f 4G4Âc õž»—½Ébà•~ãHæN¦(•;Uÿ»÷ùõ™iË‘P´yLŸ½CµlÉ÷|Ó·ã„uøj1ËŠ$5>GlõýrfÜoqß•›ö¦M‹h%¥¶¢›Ìù Òaž?;i´¤[Ž*£a=qÖø¦ì]Ž n)'·2ȉÙpd¹¨i|u§™4eø «÷¾[÷ÄC¬vä"ób¡gî¤ñ¬¶{\úÔ«ÕwÖnoyw)Mþ=Ÿ Cw¨B"ÞŠ(¼'þ¨!æ±î®`0÷§êÖç LÝÇÛl‚Ÿ Öæ¶š~añ¥Ü Ô”©SÜê].'ùâÕÂpG|ß…"d9ðª«)¾<‰›‹u†à“ä2ú=¤0uÍ¡ÖúI:e45ˆŒËí .xp1‰àXµ X÷[ÚÂ8|“±˜Ñ[¬( ¥Ó,VWJnN3Û7ˆèûrŸù¢4K0ÊèPüHÌ¥<ÿ K×ôì,¿Çô§HBÂïå{ÞG‚”¿Ë>y%*x¤ÍÞ1(äPŒ%Ûx)棳ŒÄ µ¯;ÙelÒ¦Y缟a²`$dŽH„<£,5m¸Öc«Z{h¼OÂhq„î¡^ˆÊarføûÚZ¾¬çŒ¤ù3MiZkdOD5áÙ÷a$E×§Žé® Æ‘Ôk tÀD`8€ó¾œ¡ªàðuØr9ëò®%ù—;Ñ`{+ãiäNºágš. â侤,ÓzßÀ9Ëg»éJºŠ³Ù)¬7öÂÂ1R£POl;ú6NÊ‘ç‰Hñ:°«¦¶Í~Jg7 NÍÿ©‚¯zoïݱt‹L¬Ûª…¯çg¦h玘³¾–Å ÓÕcO^–…KŠê`3ÞFÈýe ýí£ –Îo7ÆÃ®†¹©…çIë%ÓQ¢‡/wœÒ>ˆ¼HNð¶c÷Öy£(™Ñk6Ë„.–‡ÏÑì¾U÷åÖ„ví7à,,¥RŸŽÑÀ]biÄ MPGQÕ×k³H¼(D¤ô|òûÀ±mcóÚ!ÂýÒ¢DÔpé/38R߯y|ßmõͱºBÊPÙf.`¹_H7SÞ0Ì3­³1+O¿1³ ºÓÁ‹^×ø£éá¥{Z,ŠŒ|ê/>k©k«œfU!…ç’8ÜjÄšHD³¡H‘s¯úŠ?"åð‡ê ñ'—>»}÷=…“¹I"¬¿EDI©3_vªïsôÒÍj;ª©­S9jæY#KñãÌ6ÂÅóÔ1dgbýÕy·ìŒì]Eë§ñŽŠth¯Ök—!½B¦*>ÈÖèSi¦‘ÞT~‰²íÈ~݈6áÖž€°Òç맃å뤲>Þå´yÖ ÿ~k Ñ˾ ÞŒ3Þ¢€e¤¿@›³± ¼-»eWqïãÀ|7Š_㌑Gb%èIbÁK ï]¦x)ÌOvuĉ0 ÷ixææäÔÕaÖD†h˜–,•ýŽ­\gÁŠs³Ê‰(ÄÁ§øVÓÀÊü+®çX”äZ*\•œ)yd¹ÎµŸ•üjÛÖ¼ªÚ#ƒ!Òc±.‡°ØYR™“/×ÿÚDÇ"¢a ü‘‘"kËJ¦Zóîg¿)=Øx]09FaÔè4bs²ÉÕïåB„aeÿ£Eâ^ì<ññdãøúØ´ìåÒ$Ÿ.ÞñXÝ /@G"{j£Õ‹8³g$/´÷ÍëiÔæ•ÙãœÅü*Õ¿³wI ¼þ»Î-õ··[W·Þ·l+Ôa5"ZtƒïjFÌÛÆÈjw‰Õ&üLMÂÎ2¼8^Kø_4Ûü¦öI> |ÍTŽIîꯒ¬7H]Úp5<\«\Ý„æc»¹,‹dß—‡Ç G éè_ìçêÿư&Ççß‚eÙUIåØX 7Å ñ™Iðm'ú‰2û¦ ]¿#Ñù®­_̇㠿9snðRsûù€ÞzË+ˆí[j"¬Ð> …¸ßîñgÓ}áFn×WnLŽñþšÕnBÇjÉa+Tk‡v«ó[¶óbÁ¶^½y¡†Î•ø6îüs·Xê,ÌwK»(ëÈMÛ¶ð–á˜jVׯ>@õoîÜ$푱V¨‘Á¡õäuå½b‚Ôò‹ðˆ6>Ùô»_éêó^ý´uüüg9äðCï°Xàn°m^¼i…+ø$Ø.i5¶ Vœ[)¼£:>|ñe'pQ¬vâ éŽøÜU5âfΟûéÝîÖ0z MúZË,0`+¿íª}­÷ÍFªåTØ‘ uйžÇµ½@Îÿ3ud¿aùÒ/EãûGC6›«—Ùy˜0CóBÊ):¾,M)ZdA†c-ti–;td¢K¡Õ×ù ãŠV¡`á™é¼MŸ"f1›Ñâhü¿vD¡§UH›J™gÇ¡<—^w ^ æëq(mŠ(–OØO÷ 2_$‘,)žÕôâ¸þ¹×‡Z,ƒŠ'Òdàw"m¨—zö<¬8ñ˜ïø&:u³8‘<Û”7³¶·ö×tº^ÓÄ-wÀ821s…„a[.üÍÙ·ì²¾SS¸;ì9ßy•CL æ²rfH÷Ò@¼—?çʅó›T’†™Ç‚W ÝEñ{Ãm@'¸‹²ÛGµEDÂ8r\0y]ÝGvw'¢Å¶¾?¾üP¥ Ç‘„{lÞÀý,½”¹ÂÅk¶úŵ-²'¡è9KfÇ«û‚µ@À6^1ì&šè"ö¢Ögd˜³XŒ-Dù1-n‡öúà3aœûÅáhÛž…É@EFÞ…öT\Se¡Ù¯ r±“õ³f9Žk*=¬}ŸSÿŸ?ªÙsÆ©rHd›Ô1îÏ&†â²ˆË¬4𻵒2\Hó²¹}ÁP ª”¨kô|öK‰ó¦Œ4'aƒ„oT˜ŸOË˾ŠôoßkØi†Ä\zDJg´§`¬Aæ®2üƶ¶$–5/< ÒuÝßðM©Ànj:i`¶(¿­ü.àG™/ç(«¦­Ücz‚H Oýæ~ `€‰F‹PÆ ÃCv]‰—F}ìuSVÜmRY•íÿ†MÌSn?‘…nê“õõHË”&â¦×9h-ýa4” å²³þ¸@íº’·ÑºŸúýWº’±ù/¥úr |ÃfØëzÝÓ*Þ­>Çë*¿m¤ÏÖé[ö«¥Kf)n- ª°'™šb2Ùe´÷*KϦº ˜âžßrT%’j“˾*T+uP©±=©ôšwå¡POy(dLxå,{R—ÁÿîЦêgªaÇ(lb‰ꀎ!]´§v l¦û`öMéSä",•d*+Ú.öjã>ÍeeÛaâ Aù–’aWÂoŽÅÑæØF5! iLt×m­šÆBÝÖµ£Ê\öÃPÉ;Èd*d¹ŽM Ó„]÷ú„ØtÄãQ1ôÞwŠî†OĹÈháù™è›]I»&G¤ÕH# Fc´!'~ú¹“¼ßNbC?øS‘ͱé£9eObõÃ`ƒ]Ø:av_ZæÉ$éñç8ï¨ùÀG/mûX>šê™|Þý‹€Èµ§D¾:åQ·¡y»™a¾Þü-Òn-0A`¿Q'Ý'·:Ž¥ÎzúoØŸ‘‡¸6 –ýc³!Q’£¶cÏgØÇ¦Ù/,«¬Åàq)Ñ9÷wé½N{{:«îœ24ÙÂ(Ÿ©Ý^ôϧù¾Qw§ðÈ ";5Ï—åLpq[–›ÔådYFC4 mä\2³#™ß…|EšÌ?Áî%ت­û‰+:Æ‘¢;\Íeù]Ÿƒ·Ïd*“d‡Ð² C]¨òwMhëéÒ[_^« µmHÐm¡„ëŸáøh&*”^¯çŽX<ë(‘ãý¦]7Lü'}@)¥“ʾ)¸íÍÎV·ˆº¶ü{¶¾»_<§¿wûv;d^y^Lï‚ú¹Nèm]'ҀÊSþE¶’c[J z[“€GæTv £È½fä8Š®Ì;#¾MUMERï5‡Ë>Â*šb<-0~èÔ»{ùï«êÌÓQoVÇy»÷: è&ÍüÆ›’¢-o §¨›pí)s>›Bè-Ò"Ï’ë›îÄÀ:)-êºÕ€Ï¯$—†¥©0qµTû Ú¸Ž¶ŒF/õH¼IÙž;m$ T>êÃ[òì8´('ûMU¤zÜ6|ȽQ…:îi„bF4Ÿý %D]KÝH9W¹ÀÔ6E÷Õè‘/n µÒˆOò·£,Ì~ÑD§áÝíg…ˆœ­`ú³ ÞN¢Š¹ªj4­± 0šqZ-ÏÍ$îR•Ö³…ÔjŽÁ$’á hçš1õLŽd¹–‡Þ»oU-³çËô¥9± tñG3À'Õ¨úR’éRóβúØ$>_ñÓ6ðÿDÿ¹@€p /ð&ñ´Ù*Š£\aFT¬¤N\µky¡©ã쮘MæQË÷¾F¬<Œ¹{HªtNZh#¯óë híÓÜ{Íø°éÞ׎‚åÞ*\”>cceþÉÚ _®íÙà“¡üe\™ô¾R8¯†Ñw”pŸ…6ñ‡2s øŽÞ®÷ŃÓßh]uìµ¾9ûaRb“ÈÆP~Þ62tÿÎNªÁ­MÑE(Œ %K®oÒÃÏM¹üRAy^Q~ · 6yòüž‚É­}ÉØ²¬éUõÙl™S[_‡½n%ø‰iôx•€¹wèÑRLÔusÿÎÐÅ·åÈ›`‘/¼ 6ö9N!1Hk8”}ã‹Ð@ŠŠK 73@’Âø,»3Mý±]Á[Z°(ªëIͽ+gY¢Ì–í³ù=šçLsbÀ{)·`AæÓÁ©Å]vÁ2ÀÈ‹ªã Á‚¨(F6s•™Ty‹•.‰ÔÁÊçFŸì¸„}¨ñQ™5[k>Ôié>Þ&VY¸6”lÜÂå1kz‡î›Ì©ñÏ›³ïl—‚ØÆª_hV1ŒMpNãJ,7;àd`µû ÷Úç¿Ã54Ü9ÄVËÀ3"¿$Çÿ ¼ åO¯½¾’ÌÅ3g~t“ò¾¤¸uyi‚%\>[!±ÊÅ“Ÿë Ä#Ê» 2|ÂÈXbÊ õ)oÎaccó[†àü–ÍÐ=Eþ8™†Ž|(ð­3ùžIßÃPè£ú;÷¬F½OþY~‘ˆ }3£\ Ó,2¥7ÔzD‘(É%Ú_SE.4€‘_™É³I$äœö˜t3V 4¹+ê:¦# "J;4aˆ`JÆj}ÂÓ÷W’è’­ñLtzAžÔ§¤¼†«™¤âwj Å“U{Oó wž¯Ítv_ìB“·pFä<¯Ub¿“Õ ¸VS%½«odò7Iéßš˜ JOaßß¹½|<Î}¹k•®4À›9ù—oÚaÈ!®ýB?~Å‘?“LôŠ/}Û–FcU*o¦øÎˆÝg Z+Ýaùøƒðÿ'øÿDS[ ±³«ƒ±³ Âÿeâendstream endobj 160 0 obj << /Type /Font /Subtype /Type1 /Encoding 383 0 R /FirstChar 11 /LastChar 122 /Widths 387 0 R /BaseFont /JGNWHH+CMR10 /FontDescriptor 158 0 R >> endobj 158 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /JGNWHH+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-251 -250 1009 969] /Flags 4 /CharSet (/ff/fi/fl/quotedblright/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/A/B/C/D/E/F/G/H/I/J/L/M/N/O/P/R/S/T/U/V/W/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z) /FontFile 159 0 R >> endobj 387 0 obj [583 556 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 278 389 389 0 0 278 333 278 500 500 500 500 500 500 500 500 500 500 500 278 278 0 0 0 0 0 750 708 722 764 681 653 785 750 361 514 0 625 917 750 778 681 0 736 556 722 750 750 1028 0 0 0 0 0 0 0 0 0 500 556 444 556 444 306 500 556 278 306 528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 ] endobj 156 0 obj << /Length1 1012 /Length2 2892 /Length3 532 /Length 3573 /Filter /FlateDecode >> stream xÚí“i<”}ÛÇ­Y ÉR¶Óš%f†Æ0–’Ae !•mÌœÆ`&KÙ—le Ù³%*Ù*D–¤²E¶±T¶""K”Ï7ç÷8Žÿïø}þÇqÊJšŸVÖÃAC"¬ S!}ÓÓ§a¦唕Õ'h2ŽH@¡É €ijÂ=W@ ÀH55$\“SÐ'zRI8W72 ¯¯ð£èy€$MLÑd7Ѓ®AãÓD $SU=<°üq°½A’/ˆUá„Á,CœAWòÃÑ ‚ @üÆúxþòIÞtS€<ݤ@·ˆ%ðT ºpB̈ô^ ÝÉÿ‡©?Å }ðx3´ÇùŸ·ôoy´OýWÑÃÓ‡ ’S"$þ,=þeÎÄâ|<þÌž £ñ8ŒÁпB8oCÄšãÈ7À÷ÆAöOô‹ûibb`nam¦ô¯‰þLš£q²ÕóÙÕ?ö‹é÷CÂQ€óP(F/¤¿ÙÿÑÌ€€!bqúJÀÕ4‰„¦rÒwƒNpÀàX€ºcˆ H¦è—¸Iœ?z@ܨžn áGüg¡N7þ‹ÄôÒ€ó_¤ @,‘9ý‹è*6ÿ}øô/Ò ˜¥‹bCCz—ßÞÅõ7Ô ø_£K~Cºñ7< @H¿!Ý”ÏOü÷ù;F¤ø+Ã5eU8ÐTÓpÀÿ]gMÀyù€'P …j@á?£ $þ1ôÕø›]pôEA ˆá~MÄh…¹§ÕD”ôÜbUd<æZ›hv¿éUWèÐUF|Q§±—âx¥íVYÿžÖ ¿o"Þ1õ/ —‚½¯|ŸñušÉ¸ø@Äv%Ô:í)µ:Ïó¨¦uÎxªoüyiòÙ›mYŸÚçóÌåQV³l4I†æó¾UÍ™aê[à ¼udx¥œš¤%ïu¯Ò¨Ã‘c~¼É×XƺCƒÜ#Ùë”F—‰õ>{· Øs“¾;²9äæqî ö°pÇŒ ë¿—ª>fàÖ Ó4©™¹iøÊO¨;f3Ÿ¤7”­Û¬ô°À=r„ÓüÇÜ¥>û URÜ´„FÐX27¡U=‘ý2ÞRŒ\¾I–=”ÔºeÛçRi*U)C=+yÄ®¤îÒö9éBa…"·h•á¤ÛÁ[l;ñôUž-«|’{€Â>–>íBïž0¶ñ~ÆN9ç ,´ˆù*+ŠçËÌS7*t¸‹ëñò-%™«Â‡êŒѲF õPa6£çŽGYôJ;ªÉ ¹tõDörË`›‚t¾zM% }«ŸC‡¯ÔN£ß¿^w~n×5jÁ>É—’Ñžð¾çkóÅZç—ƒ5¯7+8xW7=3÷œ`÷éSñ³†ÈÛŸT nÚ;€—킆 …J\r>—ݹ¢7èÁ·z{wÝñ‡1ö/^9Ô4–fX]îÔ®}*•ʦër+5mÎÕVÖ}—æáÉû,²Õ¸áâ_– ©—œêÙ“lë;ç’¸ý>0ï± l‡GdN'Zzr<;0/åwˆQO™’jßW]Õ:ßãß½ü­¯-‹ƒüÆDPÜqBec˜ÔOTí‘a=VËTlÉ‚Óuãxâ,„.ôÁ¿&:‰b¯µ·ô½Šy޲"ÎFqÉN¥<ü‚¼$ê9œu­¦®gûž2›v¿­ù<4¨|Ãz4¼.þ“ÞíS>¦³þ.wøÃ–æ7_®;c4ÆuLÀ¼P^ÕWx®¸vVþàûòÓSË˧<êd2ÚÔRwì+…s¯ÎNp¶%á&/¾@©í»—§]O;Nƒ¤DãgÍ‚’‡MôT¤.•ÛgŒ\Ë¢¤mqém¸t…—¥×LŠˆ˜¸T.öÞ¬¶ŸãjºÖ¥ØNæ«fÓä7»çët‘?óÀØK\šubèæŠC÷ ‚z¬³çRCË#ñë]Ëíò×q¼b);aï µQÏå¤Î¥…ÎcX]î*©­bñ˜öË´ÙOUï;{çm×Y¸ïg«)Sn?…)å Bò\ðväDA‘r˜zww¦ži?Ͳý„yM°Ôd‘î^Dâ³¶ªúCµm…·û¼J"gÒær”]ƒ†]Møø8%ö¶£^1-Ó²òßP¿W¤ «bÑ/´ãñ1¾Q›§ C˜”/™óww–~=ëüÕ>g¬À[ÒöÅiµú_›Ë ŒD_õ³Ñnê³x窆 hY#V_õj¥Ý÷B‘ÔThr;þú—©yH‡ªÎdÔ®ƒ >m’úxÖY`A‡fåÝ[óñ®[6Êa9›ÆmÍnZ|c¾h½”¯î‰s9²øp±²°ÜË–g.ϯLÁ%çp¡1ó³“mŽDÒ‘Ö…ðãOh˜\Þ ½¥{e­5ïWDãQ`Ññh…·c«UíŽpÂVÞžrnÞž“̉v¶­¬˜ÏênlvÞ¶ãA†\ںטí½ÅÝôN±?¥?Ó©z©¿ÅFHO"ü‰Ày¢)–g²3…=[öNƒ+ãµ2 <È6ßLw³E\t­U˜ßéQ{ýã=_¥-›}Ž™ÖÇVd¨c&©·Ú2;8>Fëš§æsW$n”Â[ÒÎO¿>*>ó¶!sF5h»3ð¨íúZÇAl¿èÕZÞ\‰bd.Œñ©o2l9º‡‘AZÝÊÕ(l[Å×̨@ܧKÕØÙ²‘d*MŽî¹~`ˆÚщ½iû6Î9²}èÅj‡É½sí:"· ÆÆo g¸út„qÜÁ©,üÓù={Àïî)ÂG)[ˆqí”+”´m#±;-[u*†ÒP´qßäLÝ­‚d6_Ñv»'êÁu­v»z›kŸÜ:~úc½fÁö´×Ùn†µZ^­=]OZž~B´ÒlË„dB†ßˆ‘Ø7Ó²¥WnJK+±rœµ?v‚ýÌ~%ìÃO=ÕŒg @§••縰Œ7–÷º .Ÿ_0­T…„dB½äÅîíÛªÃGú VXÔ-²ñh)ò ;\<Î÷­áRQúÀ…©Á“¹A ·!Þ¾!¶ÆSwOš[£ÑŠkKgÜ6!Šf9Eœ{2-sØtJ#ÒŸ(¢S/^~:²<­Ÿ0fÌrpËíÏõeµ07ƒM~\b°ùÈŠø.ŽÕŠ(Xy¤ÄeK»€ºä)Ý;Ñ›ùa€Fë¹™Ç×Uòr+_óxNn·¨#Jc#Es+®J…N²äÉ =ÎõaFVõxT…ÜΧÐ7w´™L5äоe̓ŠÖü–‘a]Y£h¥²X‡&#JzϨ’+œ”÷4éä$ú‚õ=›t׸¯{¼VÔt ¬îs´5ˆÃxH¢+êž«îZÝøÂʇ gv{†vó0|i÷åÄÖƒø~|‹« üua‡¨g„á½ÀIïø™ÀpÞ¡#_—hÕwKŒ¦ërä qöv‡¼¨iêVÁŒÅ¬¾J¬”ý½‡Þ1= Îú4ŸuRÂVŠõÞH«H¤‚Ö¯¯Æ’[n¸l5ȺA9†w+?þÂý|÷ˆ¦?­O#Ѩ£§ÇUžÿµb×Û©µ¥‰»‚)\;[Ã=Ș¥B¹Å—Ó4ç­V¥M¿ò‹9òzOÍ "ަQ’®Üêþþª0ÎÛ•!´¦w,äÄZ2U±É›˜}1e)žþfHa+G&3©déÒÿêÇ>Ë;0+Ê`WÀǧÝüê¾;•‹¤ØãŲ¾ã‹áWtìÖ¿V÷BZa'†Ç“Ý„ÏJª ˆ2`•fç?‘ßð¡ö g޽± ÿ¤["Ç…ýïú™¼ïz®S HÛ(s EEÎÛl’[:™t5áOØ{˧Y‚+9wâ?¼_BœO â®”¬Xx+®ëåZw÷¹ê’¸ úî(³gm|ðádë½*ïy ’•EmnÊÜÚ¿÷Zóž’úئ,âFîá¢SÜb)l³7¨‘þÉSkl»ãW#C𛹅Ʋ„U§æÚ¬dFkýDy Ô›ïpñwsÞ@ã#…}7ì;ê:ÃQÂÓ²ÅßÌj ,9ŸÐ¸¶=ã{Ý£h^ûr z/W)ÈÐø˜™Õ_ŸÝ5Èí-Ú!ÓÒž¢-•Báûððº:¾´ ò]ZõL‡ØG(CÚÍ÷s`¼·4Ñø´çš·HUH'áþšŽ §ÌücðoQÜ©,!ŒÌkZ##€D«c¿dÓ¹‰Öê3< í̺­Z{»/›^‹KK¨h­%j0^"L/`ߞɚ•ëMg˼©{û}»ZÜY\¨tô‘Oƒ\Fûõ¾µ‚®q"àÕœ˜ï'Ô€`C.°½ä¨E8M¥'TCÿçþ#0xM"=Ф œÿªñBúendstream endobj 157 0 obj << /Type /Font /Subtype /Type1 /Encoding 383 0 R /FirstChar 45 /LastChar 117 /Widths 388 0 R /BaseFont /LEPQUN+CMSS17 /FontDescriptor 155 0 R >> endobj 155 0 obj << /Ascent 694 /CapHeight 694 /Descent -195 /FontName /LEPQUN+CMSS17 /ItalicAngle 0 /StemV 76 /XHeight 430 /FontBBox [-58 -250 939 758] /Flags 4 /CharSet (/hyphen/L/M/P/R/S/V/a/c/d/e/f/g/l/n/o/r/u) /FontFile 156 0 R >> endobj 388 0 obj [313 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 509 820 0 0 600 0 606 522 0 0 624 0 0 0 0 0 0 0 0 0 0 451 0 418 484 418 287 470 0 0 0 0 223 0 484 470 0 0 320 0 0 484 ] endobj 164 0 obj << /Type /Pages /Count 6 /Parent 389 0 R /Kids [150 0 R 166 0 R 170 0 R 208 0 R 224 0 R 232 0 R] >> endobj 239 0 obj << /Type /Pages /Count 6 /Parent 389 0 R /Kids [236 0 R 241 0 R 245 0 R 255 0 R 259 0 R 263 0 R] >> endobj 271 0 obj << /Type /Pages /Count 6 /Parent 389 0 R /Kids [267 0 R 273 0 R 280 0 R 286 0 R 291 0 R 297 0 R] >> endobj 308 0 obj << /Type /Pages /Count 6 /Parent 389 0 R /Kids [303 0 R 310 0 R 314 0 R 321 0 R 330 0 R 336 0 R] >> endobj 353 0 obj << /Type /Pages /Count 6 /Parent 389 0 R /Kids [343 0 R 355 0 R 362 0 R 366 0 R 370 0 R 374 0 R] >> endobj 389 0 obj << /Type /Pages /Count 30 /Kids [164 0 R 239 0 R 271 0 R 308 0 R 353 0 R] >> endobj 390 0 obj << /Type /Outlines /First 7 0 R /Last 147 0 R /Count 6 >> endobj 147 0 obj << /Title 148 0 R /A 145 0 R /Parent 390 0 R /Prev 95 0 R >> endobj 143 0 obj << /Title 144 0 R /A 141 0 R /Parent 95 0 R /Prev 139 0 R >> endobj 139 0 obj << /Title 140 0 R /A 137 0 R /Parent 95 0 R /Prev 135 0 R /Next 143 0 R >> endobj 135 0 obj << /Title 136 0 R /A 133 0 R /Parent 95 0 R /Prev 131 0 R /Next 139 0 R >> endobj 131 0 obj << /Title 132 0 R /A 129 0 R /Parent 95 0 R /Prev 127 0 R /Next 135 0 R >> endobj 127 0 obj << /Title 128 0 R /A 125 0 R /Parent 95 0 R /Prev 123 0 R /Next 131 0 R >> endobj 123 0 obj << /Title 124 0 R /A 121 0 R /Parent 95 0 R /Prev 119 0 R /Next 127 0 R >> endobj 119 0 obj << /Title 120 0 R /A 117 0 R /Parent 95 0 R /Prev 115 0 R /Next 123 0 R >> endobj 115 0 obj << /Title 116 0 R /A 113 0 R /Parent 95 0 R /Prev 111 0 R /Next 119 0 R >> endobj 111 0 obj << /Title 112 0 R /A 109 0 R /Parent 95 0 R /Prev 107 0 R /Next 115 0 R >> endobj 107 0 obj << /Title 108 0 R /A 105 0 R /Parent 95 0 R /Prev 103 0 R /Next 111 0 R >> endobj 103 0 obj << /Title 104 0 R /A 101 0 R /Parent 95 0 R /Prev 99 0 R /Next 107 0 R >> endobj 99 0 obj << /Title 100 0 R /A 97 0 R /Parent 95 0 R /Next 103 0 R >> endobj 95 0 obj << /Title 96 0 R /A 93 0 R /Parent 390 0 R /Prev 43 0 R /Next 147 0 R /First 99 0 R /Last 143 0 R /Count -12 >> endobj 91 0 obj << /Title 92 0 R /A 89 0 R /Parent 43 0 R /Prev 87 0 R >> endobj 87 0 obj << /Title 88 0 R /A 85 0 R /Parent 43 0 R /Prev 83 0 R /Next 91 0 R >> endobj 83 0 obj << /Title 84 0 R /A 81 0 R /Parent 43 0 R /Prev 79 0 R /Next 87 0 R >> endobj 79 0 obj << /Title 80 0 R /A 77 0 R /Parent 43 0 R /Prev 75 0 R /Next 83 0 R >> endobj 75 0 obj << /Title 76 0 R /A 73 0 R /Parent 43 0 R /Prev 71 0 R /Next 79 0 R >> endobj 71 0 obj << /Title 72 0 R /A 69 0 R /Parent 43 0 R /Prev 67 0 R /Next 75 0 R >> endobj 67 0 obj << /Title 68 0 R /A 65 0 R /Parent 43 0 R /Prev 63 0 R /Next 71 0 R >> endobj 63 0 obj << /Title 64 0 R /A 61 0 R /Parent 43 0 R /Prev 59 0 R /Next 67 0 R >> endobj 59 0 obj << /Title 60 0 R /A 57 0 R /Parent 43 0 R /Prev 55 0 R /Next 63 0 R >> endobj 55 0 obj << /Title 56 0 R /A 53 0 R /Parent 43 0 R /Prev 51 0 R /Next 59 0 R >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R /Parent 43 0 R /Prev 47 0 R /Next 55 0 R >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R /Parent 43 0 R /Next 51 0 R >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 390 0 R /Prev 15 0 R /Next 95 0 R /First 47 0 R /Last 91 0 R /Count -12 >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 31 0 R /Prev 35 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 31 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 15 0 R /Prev 19 0 R /First 35 0 R /Last 39 0 R /Count -2 >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 19 0 R /Prev 23 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 15 0 R /Next 31 0 R /First 23 0 R /Last 27 0 R /Count -2 >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 390 0 R /Prev 11 0 R /Next 43 0 R /First 19 0 R /Last 31 0 R /Count -2 >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 390 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 390 0 R /Next 11 0 R >> endobj 391 0 obj << /Names [(Doc-Start) 154 0 R (chapter*.1) 176 0 R (chapter.1) 6 0 R (chapter.2) 10 0 R (chapter.3) 14 0 R (chapter.4) 42 0 R (chapter.5) 94 0 R (chapter.6) 146 0 R (page.1) 153 0 R (page.10) 257 0 R (page.11) 261 0 R (page.12) 265 0 R (page.13) 269 0 R (page.14) 275 0 R (page.15) 282 0 R (page.16) 288 0 R (page.17) 293 0 R (page.18) 299 0 R (page.19) 305 0 R (page.2) 168 0 R (page.20) 312 0 R (page.21) 316 0 R (page.22) 323 0 R (page.23) 332 0 R (page.24) 338 0 R (page.25) 345 0 R (page.26) 357 0 R (page.27) 364 0 R (page.28) 368 0 R (page.29) 372 0 R (page.3) 172 0 R (page.30) 376 0 R (page.4) 210 0 R (page.5) 226 0 R (page.6) 234 0 R (page.7) 238 0 R (page.8) 243 0 R (page.9) 247 0 R (section.3.1) 18 0 R (section.3.2) 30 0 R (section.4.1) 46 0 R (section.4.10) 82 0 R (section.4.11) 86 0 R (section.4.12) 90 0 R (section.4.2) 50 0 R (section.4.3) 54 0 R (section.4.4) 58 0 R (section.4.5) 62 0 R (section.4.6) 66 0 R (section.4.7) 70 0 R (section.4.8) 74 0 R (section.4.9) 78 0 R (section.5.1) 98 0 R (section.5.10) 134 0 R (section.5.11) 138 0 R (section.5.12) 142 0 R (section.5.2) 102 0 R (section.5.3) 106 0 R (section.5.4) 110 0 R (section.5.5) 114 0 R (section.5.6) 118 0 R (section.5.7) 122 0 R (section.5.8) 126 0 R (section.5.9) 130 0 R (subsection.3.1.1) 22 0 R (subsection.3.1.2) 26 0 R (subsection.3.2.1) 34 0 R (subsection.3.2.2) 38 0 R] /Limits [(Doc-Start) (subsection.3.2.2)] >> endobj 392 0 obj << /Kids [391 0 R] >> endobj 393 0 obj << /Dests 392 0 R >> endobj 394 0 obj << /Type /Catalog /Pages 389 0 R /Outlines 390 0 R /Names 393 0 R /PageMode /UseOutlines /URI<> /ViewerPreferences<<>> /OpenAction 149 0 R /PTEX.Fullbanner (This is pdfTeX, Version 3.14159-1.10b) >> endobj 395 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.10b)/Keywords() /CreationDate (D:20051028082500) >> endobj xref 0 396 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f 0000000004 00000 f 0000000000 00000 f 0000000009 00000 n 0000018254 00000 n 0000164690 00000 n 0000000054 00000 n 0000000102 00000 n 0000021040 00000 n 0000164604 00000 n 0000000147 00000 n 0000000186 00000 n 0000024574 00000 n 0000164479 00000 n 0000000232 00000 n 0000000259 00000 n 0000024630 00000 n 0000164368 00000 n 0000000307 00000 n 0000000365 00000 n 0000024686 00000 n 0000164294 00000 n 0000000418 00000 n 0000000464 00000 n 0000032210 00000 n 0000164220 00000 n 0000000517 00000 n 0000000562 00000 n 0000032266 00000 n 0000164109 00000 n 0000000610 00000 n 0000000672 00000 n 0000035341 00000 n 0000164035 00000 n 0000000725 00000 n 0000000762 00000 n 0000035397 00000 n 0000163961 00000 n 0000000815 00000 n 0000000851 00000 n 0000037675 00000 n 0000163835 00000 n 0000000897 00000 n 0000000947 00000 n 0000037731 00000 n 0000163761 00000 n 0000000995 00000 n 0000001031 00000 n 0000037787 00000 n 0000163674 00000 n 0000001079 00000 n 0000001149 00000 n 0000040969 00000 n 0000163587 00000 n 0000001197 00000 n 0000001241 00000 n 0000041025 00000 n 0000163500 00000 n 0000001289 00000 n 0000001334 00000 n 0000044219 00000 n 0000163413 00000 n 0000001382 00000 n 0000001426 00000 n 0000044275 00000 n 0000163326 00000 n 0000001474 00000 n 0000001519 00000 n 0000046832 00000 n 0000163239 00000 n 0000001567 00000 n 0000001618 00000 n 0000046888 00000 n 0000163152 00000 n 0000001666 00000 n 0000001724 00000 n 0000050548 00000 n 0000163065 00000 n 0000001772 00000 n 0000001846 00000 n 0000053443 00000 n 0000162978 00000 n 0000001895 00000 n 0000001962 00000 n 0000053499 00000 n 0000162891 00000 n 0000002011 00000 n 0000002074 00000 n 0000055712 00000 n 0000162817 00000 n 0000002123 00000 n 0000002167 00000 n 0000059018 00000 n 0000162689 00000 n 0000002213 00000 n 0000002261 00000 n 0000059074 00000 n 0000162613 00000 n 0000002309 00000 n 0000002347 00000 n 0000059129 00000 n 0000162522 00000 n 0000002396 00000 n 0000002434 00000 n 0000062299 00000 n 0000162430 00000 n 0000002483 00000 n 0000002516 00000 n 0000062356 00000 n 0000162338 00000 n 0000002565 00000 n 0000002596 00000 n 0000064578 00000 n 0000162246 00000 n 0000002645 00000 n 0000002680 00000 n 0000064635 00000 n 0000162154 00000 n 0000002729 00000 n 0000002760 00000 n 0000064692 00000 n 0000162062 00000 n 0000002809 00000 n 0000002840 00000 n 0000067015 00000 n 0000161970 00000 n 0000002889 00000 n 0000002920 00000 n 0000067072 00000 n 0000161878 00000 n 0000002969 00000 n 0000003002 00000 n 0000070560 00000 n 0000161786 00000 n 0000003052 00000 n 0000003084 00000 n 0000070617 00000 n 0000161694 00000 n 0000003134 00000 n 0000003169 00000 n 0000070674 00000 n 0000161616 00000 n 0000003219 00000 n 0000003254 00000 n 0000073382 00000 n 0000161538 00000 n 0000003301 00000 n 0000003357 00000 n 0000003779 00000 n 0000004005 00000 n 0000003409 00000 n 0000003891 00000 n 0000003948 00000 n 0000160346 00000 n 0000156490 00000 n 0000160184 00000 n 0000155668 00000 n 0000141124 00000 n 0000155507 00000 n 0000140387 00000 n 0000128706 00000 n 0000140225 00000 n 0000160784 00000 n 0000004495 00000 n 0000004326 00000 n 0000004102 00000 n 0000004438 00000 n 0000011505 00000 n 0000007397 00000 n 0000004566 00000 n 0000011391 00000 n 0000128015 00000 n 0000118223 00000 n 0000127853 00000 n 0000011448 00000 n 0000007713 00000 n 0000117531 00000 n 0000106148 00000 n 0000117369 00000 n 0000007864 00000 n 0000008015 00000 n 0000008166 00000 n 0000104742 00000 n 0000098355 00000 n 0000104580 00000 n 0000008318 00000 n 0000008477 00000 n 0000008634 00000 n 0000008787 00000 n 0000008946 00000 n 0000009105 00000 n 0000009256 00000 n 0000009409 00000 n 0000009562 00000 n 0000009715 00000 n 0000009868 00000 n 0000010021 00000 n 0000010174 00000 n 0000010327 00000 n 0000010480 00000 n 0000010632 00000 n 0000010786 00000 n 0000010938 00000 n 0000011092 00000 n 0000011241 00000 n 0000015019 00000 n 0000012908 00000 n 0000011628 00000 n 0000014962 00000 n 0000013128 00000 n 0000013280 00000 n 0000013433 00000 n 0000013586 00000 n 0000013739 00000 n 0000013892 00000 n 0000014044 00000 n 0000014197 00000 n 0000014350 00000 n 0000014503 00000 n 0000014657 00000 n 0000014811 00000 n 0000018309 00000 n 0000017890 00000 n 0000015103 00000 n 0000018197 00000 n 0000018022 00000 n 0000097528 00000 n 0000085394 00000 n 0000097367 00000 n 0000019444 00000 n 0000019275 00000 n 0000018445 00000 n 0000019387 00000 n 0000021096 00000 n 0000020871 00000 n 0000019554 00000 n 0000020983 00000 n 0000160901 00000 n 0000021686 00000 n 0000021517 00000 n 0000021219 00000 n 0000021629 00000 n 0000024742 00000 n 0000024405 00000 n 0000021770 00000 n 0000024517 00000 n 0000085058 00000 n 0000081882 00000 n 0000084894 00000 n 0000080636 00000 n 0000077347 00000 n 0000080474 00000 n 0000028557 00000 n 0000028388 00000 n 0000024891 00000 n 0000028500 00000 n 0000032322 00000 n 0000032041 00000 n 0000028667 00000 n 0000032153 00000 n 0000035453 00000 n 0000035172 00000 n 0000032458 00000 n 0000035284 00000 n 0000037843 00000 n 0000037334 00000 n 0000035589 00000 n 0000037618 00000 n 0000037466 00000 n 0000161018 00000 n 0000041081 00000 n 0000040310 00000 n 0000037966 00000 n 0000040912 00000 n 0000040458 00000 n 0000040610 00000 n 0000040762 00000 n 0000044331 00000 n 0000043721 00000 n 0000041204 00000 n 0000044162 00000 n 0000043861 00000 n 0000044012 00000 n 0000046944 00000 n 0000046491 00000 n 0000044467 00000 n 0000046775 00000 n 0000046623 00000 n 0000050604 00000 n 0000050046 00000 n 0000047067 00000 n 0000050491 00000 n 0000050186 00000 n 0000050338 00000 n 0000053555 00000 n 0000052942 00000 n 0000050727 00000 n 0000053386 00000 n 0000053082 00000 n 0000053234 00000 n 0000055768 00000 n 0000055211 00000 n 0000053678 00000 n 0000055655 00000 n 0000055351 00000 n 0000055503 00000 n 0000161135 00000 n 0000056373 00000 n 0000056204 00000 n 0000055891 00000 n 0000056316 00000 n 0000059186 00000 n 0000058353 00000 n 0000056457 00000 n 0000058961 00000 n 0000058501 00000 n 0000058653 00000 n 0000058808 00000 n 0000062413 00000 n 0000061316 00000 n 0000059309 00000 n 0000062242 00000 n 0000061480 00000 n 0000061632 00000 n 0000061787 00000 n 0000061940 00000 n 0000062092 00000 n 0000064749 00000 n 0000064077 00000 n 0000062536 00000 n 0000064521 00000 n 0000064217 00000 n 0000064369 00000 n 0000067129 00000 n 0000066356 00000 n 0000064872 00000 n 0000066958 00000 n 0000066504 00000 n 0000066656 00000 n 0000066808 00000 n 0000070730 00000 n 0000069251 00000 n 0000067252 00000 n 0000070503 00000 n 0000069431 00000 n 0000069582 00000 n 0000069735 00000 n 0000069888 00000 n 0000070041 00000 n 0000070194 00000 n 0000070348 00000 n 0000161252 00000 n 0000072315 00000 n 0000071649 00000 n 0000070853 00000 n 0000072258 00000 n 0000071797 00000 n 0000071950 00000 n 0000072104 00000 n 0000073439 00000 n 0000073213 00000 n 0000072425 00000 n 0000073325 00000 n 0000074606 00000 n 0000074437 00000 n 0000073536 00000 n 0000074549 00000 n 0000075482 00000 n 0000075313 00000 n 0000074703 00000 n 0000075425 00000 n 0000076232 00000 n 0000076063 00000 n 0000075566 00000 n 0000076175 00000 n 0000076329 00000 n 0000080850 00000 n 0000080934 00000 n 0000085273 00000 n 0000098009 00000 n 0000104988 00000 n 0000105202 00000 n 0000117876 00000 n 0000128361 00000 n 0000140808 00000 n 0000156105 00000 n 0000160582 00000 n 0000161369 00000 n 0000161463 00000 n 0000164762 00000 n 0000166188 00000 n 0000166227 00000 n 0000166265 00000 n 0000166492 00000 n trailer << /Size 396 /Root 394 0 R /Info 395 0 R >> startxref 166648 %%EOF pvm-0.1.5/doc/sgml/0000755002606100260610000000000010330414315014270 5ustar houckhouck00000000000000pvm-0.1.5/doc/sgml/pvm.sgml0000644002606100260610000010656410330414267016000 0ustar houckhouck00000000000000 S-Lang PVM Module Reference <author> John C. Houck, <tt>houck@space.mit.edu</tt> <date> Oct 28, 2005 <toc> <chapt>Introduction to the PVM Module<p> PVM (Parallel Virtual Machine) is a software package which permits a heterogeneous collection of Unix and/or Windows computers, connected by a network, to be used as a single large parallel computer. The <tt>PVM</tt> module provides a <bf>S-lang</bf> interface to this package. By performing distributed computations with <bf>S-lang</bf> one can make better use of available computer resources yet still retain the advantages of programming in an interpreted language. This document briefly describes how to use the <bf>S-lang</bf> interface to <tt>PVM</tt>. It assumes that the reader is already familiar with the PVM package itself. For complete details on obtaining, installing and using the PVM package, see the <url url="http://www.csm.ornl.gov/pvm/" name="PVM documentation">. Note that, once the PVM package is properly installed on your computer, the PVM <tt>man</tt> pages will provide detailed documentation on all the PVM library functions. Although the <bf>S-lang</bf> <tt>PVM</tt> module functions often have slightly different interfaces, the differences are usually minor so the PVM documentation is quite helpful. Because the <bf>S-lang</bf> interface is not yet fully documented, it will be necessary to consult the <tt>PVM</tt> documentation directly to make full use of the <bf>S-lang</bf> <tt>PVM</tt> module. Because PVM processes require running programs on remote hosts, it is necessary to provide each host with the full path to the relevant executables. To simplify this process, it may be useful to create a directory, e.g.<tt>$HOME/bin/PVM</tt>, on every host and put relevant executables in that directory so that the same relative path will work on all machines. This PVM path may be specified in the <tt>$HOME/.pvmhosts</tt> configuration file; for a detailed description of the contents of this file, see the <tt>pvmd</tt> man page. The usage examples discussed in this manual assume that the PVM has already been initialized by running a command such as <tscreen><verb> unix> pvm ~/.pvmhosts </verb></tscreen> This starts the PVM <it>console</it> and also starts the PVM daemon, <tt>pvmd</tt>, on each remote host. This daemon runs all PVM slave processes and handles all communications with the parent process and the rest of the PVM. The execution environment of the PVM slave processes is inherited from the corresponding <tt>pvmd</tt> process which, in turn, is inherited from the parent process which started the PVM <it>console</it>. However, it is sometimes useful to configure the environment of the remote <tt>pvmd</tt> process using a startup script, <tt>$HOME/.pvmprofile</tt>. This is a Bourne shell script which, if present, is run when <tt>pvmd</tt> is started. For a detailed description of the contents of this file, see the <tt>pvmd</tt> man page. <chapt>Using the PVM Module<p> To use the <tt>PVM</tt> module in a <bf>S-lang</bf> script, it is first necessary to make the functions in the package known to the interpreter via <tscreen><verb> () = evalfile ("pvm"); </verb></tscreen> or, if the application embedding the interpreter supports the <tt>require</tt> function, <tscreen><verb> require ("pvm"); </verb></tscreen> may be used. If there is a namespace conflict between symbols in the script and those defined in the module, it may be necessary to load the PVM package into a namespace, e.g., <tscreen><verb> () = evalfile ("pvm", "p"); </verb></tscreen> will place the PVM symbols into a namespace called <tt>p</tt>. Once the PVM module has been loaded, the functions it defines may be used in the usual way, e.g., <tscreen><verb> require ("pvm"); . . variable master_tid = pvm_mytid (); </verb></tscreen> where <tt>pvm_mytid</tt> is the PVM function which returns the task identifier of the calling process. <chapt>Examples<p> This section presents examples of two alternate methods of using the PVM module. The source code for these examples is included in the <tt>PVM</tt> module source code distribution in the <tt>examples</tt> subdirectory. The first method uses PVM library routines to manage a simple distributed application. The second method uses the higher-level master-slave interface. This interface can provide a high degree of tolerance to failure of slave machines which proves useful in long-running distributed applications. <sect>Example 1: A Simple <it>Hello World</it> Program<p> In programming language tutorials, the first example is usually a program which simply prints out a message such as <it>Hello World</it> and then exits. The intent of such a trivial example is to illustrate all the steps involved in writing and running a program in that language. To write a <it>Hello World</it> program using the PVM module, we will write two programs, the master (<#if output=html><url url="http://space.mit.edu/cxc/software/slang/modules/pvm/examples/hello_master" name="hello_master"></#if><#unless output=html>hello_master</#unless>), and the slave (<#if output=html><url url="http://space.mit.edu/cxc/software/slang/modules/pvm/examples/hello_master" name="hello_slave"></#if><#unless output=html>hello_slave</#unless>). The master process will spawn a slave process on different host and then wait for a message from that slave process. When the slave runs, it sends a message to the master, or parent, and then exits. For the purpose of this example, we will assume that the PVM consists of two hosts, named <tt>vex</tt> and <tt>pirx</tt>, and that the slave process will run on <tt>pirx</tt>. <sect1>The <tt>hello_master</tt> program<p> First, consider the master process, <#if output=html><url url="http://space.mit.edu/cxc/software/slang/modules/pvm/examples/hello_master" name="hello_master"></#if><#unless output=html>hello_master</#unless>. Conceptually, it must specify the full path to the slave executable and then send that information to the slave host (<tt>pirx</tt>). For this example, we assume that the master and slave executables are in the same directory and that the master process is started in that directory. With this assumption, we can construct the path to the slave executable using the <tt>getcwd</tt> and <tt>path_concat</tt> functions. We then send this information to the slave host using the <tt>pvm_spawn</tt> function: <tscreen><verb> path = path_concat (getcwd(), "hello_slave"); slave_tid = pvm_spawn (path, PvmTaskHost, "pirx", 1); </verb></tscreen> The first argument to <tt>pvm_spawn</tt> specifies the full path to the slave executable. The second argument is a bit mask specifying options associated with spawning the slave process. The <tt>PvmTaskHost</tt> option indicates that the slave process is to be started on a specific host. The third argument gives the name of the slave host and the last argument indicates how many copies of this process should be started. The return value of <tt>pvm_spawn</tt> is an array of task identifiers for each of the slave processes; negative values indicate that an error occurred. Having spawned the <#if output=html><url url="http://space.mit.edu/cxc/software/slang/modules/pvm/examples/hello_master" name="hello_slave"></#if><#unless output=html>hello_slave</#unless> process on <tt>pirx</tt>, the master process calls the <tt>pvm_recv</tt> function to receive a message from the slave. <tscreen><verb> bufid = pvm_recv (-1, -1); </verb></tscreen> The first argument to <tt>pvm_recv</tt> specifies the task identifier of the slave process expected to send the message and the second argument specifies the type of message that is expected. A slave task identifier <tt>-1</tt> means that a message from any slave will be accepted. Similarly, a message identifier of <tt>-1</tt> means that any type of message will be accepted. In this example, we could have specified the slave task id and the message identifier explicitly: <tscreen><verb> bufid = pvm_recv (slave_tid, 1); </verb></tscreen> When a suitable message is received, the contents of the message are stored in a PVM buffer and <tt>pvm_recv</tt> returns the buffer identifier which may be used by the PVM application to retrieve the contents of the buffer. Retrieving the contents of the buffer normally requires knowing the format in which the information is stored. In this case, because we accepted all types of messages from the slave, we may need to examine the message buffer to find out what kind of message was actually recieved. The <tt>pvm_bufinfo</tt> function is used to obtain information about the contents of the buffer. <tscreen><verb> (,msgid,) = pvm_bufinfo (bufid); </verb></tscreen> Given the buffer identifier, <tt>pvm_bufinfo</tt> returns the number of bytes, the message identifier and the task identifer sending the message. Because we know that the slave process sent a single object of <tt>Struct_Type</tt>, we retrieve it by calling the <tt>pvm_recv_obj</tt> function. <tscreen><verb> variable obj = pvm_recv_obj(); vmessage ("%s says %s", obj.from, obj.msg); </verb></tscreen> This function is not part of the PVM package but is a higher level function provided by the <tt>PVM</tt> module. It simplifies the process of sending <bf>S-lang</bf> objects between hosts by handling some of the bookkeeping required by the lower level PVM interface. Having retrieved a <bf>S-lang</bf> object from the message buffer, we can then print out the message. Running <#if output=html><url url="http://space.mit.edu/cxc/software/slang/modules/pvm/examples/hello_master" name="hello_master"></#if><#unless output=html>hello_master</#unless>, we see: <tscreen><verb> vex> ./hello_master pirx says Hello World </verb></tscreen> Note that before exiting, all PVM processes should call the <tt>pvm_exit</tt> function to inform the <tt>pvmd</tt> daemon of the change in PVM status. <tscreen><verb> pvm_exit(); exit(0); </verb></tscreen> At this point, the script may exit normally. <sect1>The <tt>hello_slave</tt> program<p> Now, consider the slave process, <#if output=html><url url="http://space.mit.edu/cxc/software/slang/modules/pvm/examples/hello_master" name="hello_slave"></#if><#unless output=html>hello_slave</#unless>. Conceptually, it must first determine the location of its parent process, then create and send a message to that process. The task identifier of the parent process is obtained using the <tt>pvm_parent</tt> function. <tscreen><verb> variable ptid = pvm_parent(); </verb></tscreen> For this example, we will send a message consisting of a <bf>S-lang</bf> structure with two fields, one containing the name of the slave host and the other containing the string <tt>"Hello World"</tt>. We use the <tt>pvm_send_obj</tt> function to send this this message because it automatically handles packaging all the separate structure fields into a PVM message buffer and also sends along the structure field names and data types so that the structure can be automatically re-assembled by the receiving process. This makes it possible to write code which transparently sends <bf>S-lang</bf> objects from one host to another. To create and send the structure: <tscreen><verb> variable s = struct {msg, from}; s.msg = "Hello World"; s.from = getenv ("HOST"); pvm_send_obj (ptid, 1, s); </verb></tscreen> The first argument to <tt>pvm_send_obj</tt> specifies the task identifier of the destination process, the second argument is a message identifier which is used to indicate what kind of message has been sent. The remaining arguments contain the data objects to be included in the message. Having sent a message to the parent process, the slave process then calls <tt>pvm_exit</tt> to inform the <tt>pvmd</tt> daemon that its work is complete. This allows <tt>pvmd</tt> to notify the parent process that a slave process has exited. The slave then exits normally. <sect>Example 2: Using the Master-Slave Interface<p> The <tt>PVM</tt> module provides a higher level interface to support the master-slave paradigm for distributed computations. The symbols associated with this interface have the <tt>pvm_ms</tt> prefix to distinguish them from those symbols associated with the PVM package itself. The <tt>pvm_ms</tt> interface provides a means for handling computations which consist of a predetermined list of tasks which can be performed by running arbitrary slave processes which take command-line arguments. The interface provides a high degree of robustness, allowing one to add or delete hosts from the PVM while the distributed process is running and also ensuring that the task list will be completed even if one or more slave hosts fail (e.g. crash) during the computation. Experience has shown that this failure tolerance is surprisingly important. Long-running distributed computations experience failure of one or more hosts with surprising frequency and it is essential that such failures do not require restarting the entire distributed computation from the beginning. Scripts using this interface must initialize it by loading the <tt>pvm_ms</tt> package via, e.g. <tscreen><verb> require ("pvm_ms"); </verb></tscreen> As an example of how to use this interface, we examine the scripts <#if output=html><url url="http://space.mit.edu/cxc/software/slang/modules/pvm/examples/master" name="master"></#if><#unless output=html>master</#unless> and <#if output=html><url url="http://space.mit.edu/cxc/software/slang/modules/pvm/examples/master" name="slave"></#if><#unless output=html>slave</#unless>. <sect1>The <tt>master</tt> program<p> The <#if output=html><url url="http://space.mit.edu/cxc/software/slang/modules/pvm/examples/master" name="master"></#if><#unless output=html>master</#unless> script first builds a list of tasks each consisting of an array of strings which provide the command line for each slave process that will be spawned on the PVM. For this simple example, the same command line will be executed a specified number of times. First, the script constructs the path to the <#if output=html><url url="http://space.mit.edu/cxc/software/slang/modules/pvm/examples/master" name="slave"></#if><#unless output=html>slave</#unless> executable, (<tt>Slave_Pgm</tt>), and then the command line (<tt>Cmd</tt>), that each <#if output=html><url url="http://space.mit.edu/cxc/software/slang/modules/pvm/examples/master" name="slave"></#if><#unless output=html>slave</#unless> instance will invoke. Then the array of tasks is constructed: <tscreen><verb> variable pgm_argvs = Array_Type[N]; variable pgm_argv = [Slave_Pgm, Cmd]; pgm_argvs[*] = pgm_argv; </verb></tscreen> The distribution of these tasks across the available PVM is automatically handled by the <tt>pvm_ms</tt> interface. The interface will simultaneously start as many tasks as possible up to some maximum number of processes per host. Here we specify that a maximum of two processes per host may run simultaneously and then submit the list of tasks to the PVM: <tscreen><verb> pvm_ms_set_num_processes_per_host (2); exit_status = pvm_ms_run_master (pgm_argvs); </verb></tscreen> As each slave process is completed, its exit status is recorded along with any messages printed to <tt>stdout</tt> during the execution. When the entire list of tasks is complete, an array of structures is returned containing status information for each task that was executed. In this example, the <#if output=html><url url="http://space.mit.edu/cxc/software/slang/modules/pvm/examples/master" name="master"></#if><#unless output=html>master</#unless> process simply prints out this information. <sect1>The <tt>slave</tt> program<p> The <#if output=html><url url="http://space.mit.edu/cxc/software/slang/modules/pvm/examples/master" name="slave"></#if><#unless output=html>slave</#unless> process in this example is relatively simple. Its command line arguments provide the task to be completed. These arguments are then passed to <tt>pvm_ms_run_slave</tt> <tscreen><verb> pvm_ms_run_slave (__argv[[1:]]); </verb></tscreen> which spawns a subshell, runs the specified command, communicates the task completion status to the parent process and exits. <chapt>Master-Slave Function Reference<p> <sect><bf>pvm_ms_kill</bf><label id="pvm_ms_kill"><p><descrip> <tag> Synopsis </tag> Send a "task complete" message to a specific task <tag> Usage </tag> <tt>pvm_ms_kill (Int_Type mtid, Int_Type stid)</tt> <tag> Description </tag> This function may be used to send a "task complete" message to a specific PVM process. The first argument gives the task identifier of the destination process. The second argument gives the task identifier of the sending process. <tag> Example </tag> <tscreen><verb> tid = pvm_mytid (); ptid = pvm_parent (); pvm_ms_kill (ptid, tid); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_ms_slave_exit" name="pvm_ms_slave_exit"></tt> </descrip><p> <sect><bf>pvm_ms_set_num_processes_per_host</bf><label id="pvm_ms_set_num_processes_per_host"><p><descrip> <tag> Synopsis </tag> Set the maximum number of simultaneous processes per host <tag> Usage </tag> <tt>pvm_ms_set_num_processes_per_host (Int_Type num_processes)</tt> <tag> Description </tag> This function is used to set the maximum number of simultaneous processes per host. The master process normally runs as many simultaneous processes as possible; by setting the maximum number of simultaneous processes per host, one can limit the processing load per host. <tag> Example </tag> <tscreen><verb> pvm_ms_set_num_processes_per_host (2); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_ms_run_master" name="pvm_ms_run_master"></tt> </descrip><p> <sect><bf>pvm_ms_set_debug</bf><label id="pvm_ms_set_debug"><p><descrip> <tag> Synopsis </tag> Set the debug flag <tag> Usage </tag> <tt>pvm_ms_set_debug (Int_Type debug)</tt> <tag> Description </tag> This function may be used to control whether debugging information is printed out during execution. Debugging information is printed if the flag is non-zero. <tag> Example </tag> <tscreen><verb> pvm_ms_set_debug (1); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_ms_set_num_processes_per_host" name="pvm_ms_set_num_processes_per_host"></tt> </descrip><p> <sect><bf>pvm_ms_slave_exit</bf><label id="pvm_ms_slave_exit"><p><descrip> <tag> Synopsis </tag> Cause a normal exit of a slave process from the PVM <tag> Usage </tag> <tt>pvm_ms_slave_exit (Int_Type exit_status)</tt> <tag> Description </tag> To exit the PVM, a slave process calls this function to send its exit status to the parent process and to notify the local <tt>pvmd</tt> of its exit. <tag> Example </tag> <tscreen><verb> pvm_ms_slave_exit (exit_status); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_ms_run_slave" name="pvm_ms_run_slave"></tt> </descrip><p> <sect><bf>pvm_ms_run_slave</bf><label id="pvm_ms_run_slave"><p><descrip> <tag> Synopsis </tag> Execute the slave's assigned task in a subshell, then exit the PVM <tag> Usage </tag> <tt>pvm_ms_run_slave (String_Type argv[])</tt> <tag> Description </tag> A slave process calls this function to run a command in a subshell and then exit the PVM. The command line is constructed by concatenting the elements of an array of strings, <tt>argv</tt>, delimited by spaces. The integer return value from the <tt>system</tt> call provides the exit status for the slave process. After sending this value to its parent process, the slave notifies the PVM and exits. <tag> Example </tag> <tscreen><verb> pvm_ms_run_slave (argv); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_ms_slave_exit" name="pvm_ms_slave_exit"></tt> </descrip><p> <sect><bf>pvm_ms_run_master</bf><label id="pvm_ms_run_master"><p><descrip> <tag> Synopsis </tag> Submit a list of tasks to the PVM <tag> Usage </tag> <tt>Struct_Type exit_status[] = pvm_ms_run_master (String_Type pgms[])</tt> <tag> Description </tag> This function is used to submit a managed list of tasks to the PVM. The task list manager will try to ensure that all tasks are completed and, upon completion of the task list, will return an array of structures containing information about the results of each task. <tag> Example </tag> To run the Unix command <it>ps xu</it> on a number of different hosts: <tscreen><verb> variable slave_argv = Array_Type[n]; slave_argv[*] = ["ps", "axu"]; exit_status = pvm_ms_run_master (slave_argv); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_ms_add_new_slave" name="pvm_ms_add_new_slave"></tt> </descrip><p> <sect><bf>pvm_ms_add_new_slave</bf><label id="pvm_ms_add_new_slave"><p><descrip> <tag> Synopsis </tag> Add a new slave to the managed list <tag> Usage </tag> <tt>pvm_ms_add_new_slave (String_Type argv[])</tt> <tag> Description </tag> This function may be used to add a new slave process while pvm_ms_run_master() is running, usually as a result of handling a message. <tag> Example </tag> <tscreen><verb> pvm_ms_add_new_slave ("vex"); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_ms_run_master" name="pvm_ms_run_master"></tt> </descrip><p> <sect><bf>pvm_ms_set_message_callback</bf><label id="pvm_ms_set_message_callback"><p><descrip> <tag> Synopsis </tag> Set a callback for handling user-defined messages <tag> Usage </tag> <tt>pvm_ms_set_message_callback (Ref_Type func)</tt> <tag> Description </tag> This function may be used to handle user-defined messages be sent from slave processes back to the master process. <tag> Example </tag> <tscreen><verb> static define handle_user_message (msgid, tid) { switch (msgid) { case USER_SLAVE_RESULT: recv_results (tid); start_task (tid); } { case USER_SLAVE_READY: start_task (tid); } { % default: return 0; } return 1; } pvm_ms_set_message_callback (&handle_user_message); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_ms_set_idle_host_callback" name="pvm_ms_set_idle_host_callback">, <ref id="pvm_ms_set_slave_exit_failed_callback" name="pvm_ms_set_slave_exit_failed_callback"></tt> </descrip><p> <sect><bf>pvm_ms_set_slave_exit_failed_callback</bf><label id="pvm_ms_set_slave_exit_failed_callback"><p><descrip> <tag> Synopsis </tag> Set a hook to be called when a slave exits on failure <tag> Usage </tag> <tt>pvm_ms_set_slave_exit_failed_callback (Ref_Type func)</tt> <tag> Description </tag> This function may be used to have the master process perform a specified action whenever a slave process exits without having completed its assigned task. This is primarily useful in the context where each command-line submitted to <tt>pvm_ms_run_master</tt> represents a task which itself communicates with the PVM, performing potentially many additional tasks which are independently managed by the process that called <tt>pvm_ms_run_master</tt>. For example, consider a case in which initialization of slave processes is very expensive but, once initialized, a single slave process may perform many tasks. In this case, the master process may spawn a small number of slaves and then repeatedly send each slave a task to perform. Each slave performs its task, sends the result to the master, and then waits for another task. The managing process must keep track of which tasks have been completed and which remain. If a slave exits while working on a task, it is important that the manager process be notified that that task in progress was not completed and that it should be reassigned to another slave. <tag> Example </tag> <tscreen><verb> static define slave_exit_failed_callback (msgid, tid) { variable t = find_task_tid (tid); if (orelse {t == NULL} {t.status == FINISHED}) return; % mark the unfinished task "READY" so that it will % be assigned to another slave t.tid = -1; t.status = READY; } pvm_ms_set_slave_exit_failed_callback (&slave_exit_failed_callback); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_ms_set_message_callback" name="pvm_ms_set_message_callback"></tt> </descrip><p> <sect><bf>pvm_ms_set_slave_spawned_callback</bf><label id="pvm_ms_set_slave_spawned_callback"><p><descrip> <tag> Synopsis </tag> Set the slave spawned callback hook <tag> Usage </tag> <tt>pvm_ms_set_slave_spawned_callback (Ref_Type func)</tt> <tag> Description </tag> This function may be used to specify a callback function to be called whenever a slave process has been spawned. The callback function will be called with three arguments: the slave task id, the name of the host running the slave process, and an array of strings representing the argument list passed to the slave. <tag> Example </tag> <tscreen><verb> static define slave_spawned_callback (tid, host, argv) { vmessage ("Slave running %s spawned on %s with task-id %d", argv[0], host, tid); } pvm_ms_set_slave_spawned_callback (&slave_spawned_callback); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_ms_set_message_callback" name="pvm_ms_set_message_callback"></tt> </descrip><p> <sect><bf>pvm_ms_set_idle_host_callback</bf><label id="pvm_ms_set_idle_host_callback"><p><descrip> <tag> Synopsis </tag> Set the idle host hook <tag> Usage </tag> <tt>pvm_ms_set_idle_host_callback (Ref_Type func)</tt> <tag> Description </tag> This function may be used to specify a callback function to be called whenever a new host is added to the virtual machine. <tag> Example </tag> <tscreen><verb> static define idle_host_callback () { loop (Max_Num_Processes_Per_Host) { variable slave_argv = build_slave_argv (0); pvm_ms_add_new_slave (slave_argv); } } pvm_ms_set_idle_host_callback (&idle_host_callback); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_ms_set_message_callback" name="pvm_ms_set_message_callback"></tt> </descrip><p> <sect><bf>pvm_ms_set_hosts</bf><label id="pvm_ms_set_hosts"><p><descrip> <tag> Synopsis </tag> Set list of hosts to use <tag> Usage </tag> <tt>pvm_ms_set_hosts (String_Type hosts[])</tt> <tag> Description </tag> This function may be used to specify which hosts will be used to perform distributed calculations. The default is to use all hosts in the current PVM. <tag> Example </tag> <tscreen><verb> pvm_ms_set_hosts (["vex", "pirx", "aluche"]); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_addhosts" name="pvm_addhosts"></tt> </descrip><p> <chapt>PVM Module Function Reference<p> <sect><bf>pvm_send_obj</bf><label id="pvm_send_obj"><p><descrip> <tag> Synopsis </tag> Pack and send data objects <tag> Usage </tag> <tt>pvm_send (Int_Type tid, Int_Type msgid, object [,...])</tt> <tag> Description </tag> This function is much like <tt>pvm_psend</tt> except that it sends additional type information with each object. Using this function paired with <tt>pvm_recv_obj</tt> simplifies sending aggregate data objects such as structures and removes the need for the receiver to specify datatypes explicitly. <tag> Example </tag> To send a <bf>S-lang</bf> structure to another process: <tscreen><verb> variable obj = struct {name, x, y, data}; ... pvm_send_obj (tid, msgid, obj); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_recv_obj" name="pvm_recv_obj">, <ref id="pvm_psend" name="pvm_psend">, <ref id="pvm_unpack" name="pvm_unpack"></tt> </descrip><p> <sect><bf>pvm_recv_obj</bf><label id="pvm_recv_obj"><p><descrip> <tag> Synopsis </tag> Receive data objects from <tt>pvm_send_obj</tt> <tag> Usage </tag> <tt>obj = pvm_recv_obj ()</tt> <tag> Description </tag> This function receives an object sent by <tt>pvm_send_obj</tt> and returns a slang object of the same type that was sent. It simplifies sending aggregate data types such as structures. <tag> Example </tag> To receive a <bf>S-lang</bf> object sent by another process via <tt>pvm_send_obj</tt>: <tscreen><verb> obj = pvm_recv_obj (); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_send_obj" name="pvm_send_obj">, <ref id="pvm_psend" name="pvm_psend">, <ref id="pvm_unpack" name="pvm_unpack"></tt> </descrip><p> <sect><bf>pvm_config</bf><label id="pvm_config"><p><descrip> <tag> Synopsis </tag> Returns information about the present virtual machine configuration <tag> Usage </tag> <tt>Struct_Type = pvm_config ()</tt> <tag> Description </tag> See the PVM documentation. <tag> Example </tag> <tscreen><verb> h = pvm_config (); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_kill" name="pvm_kill"></tt> </descrip><p> <sect><bf>pvm_kill</bf><label id="pvm_kill"><p><descrip> <tag> Synopsis </tag> Terminates a specified PVM process <tag> Usage </tag> <tt>pvm_kill (Int_Type tid)</tt> <tag> Description </tag> See the PVM documentation. <tag> Example </tag> <tscreen><verb> pvm_kill (tid); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_config" name="pvm_config"></tt> </descrip><p> <sect><bf>pvm_initsend</bf><label id="pvm_initsend"><p><descrip> <tag> Synopsis </tag> Clear default send buffer and specify message encoding <tag> Usage </tag> <tt>bufid = pvm_initsend (Int_Type encoding)</tt> <tag> Description </tag> See the PVM documentation. <tag> Example </tag> <tscreen><verb> bufid = pvm_initsend (PvmDataDefault); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_send" name="pvm_send"></tt> </descrip><p> <sect><bf>pvm_pack</bf><label id="pvm_pack"><p><descrip> <tag> Synopsis </tag> Pack the active message buffer with arrays of prescribed data type <tag> Usage </tag> <tt>pvm_pack (object)</tt> <tag> Description </tag> See the PVM documentation. <tag> Example </tag> <tscreen><verb> pvm_pack (x); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_unpack" name="pvm_unpack"></tt> </descrip><p> <sect><bf>pvm_send</bf><label id="pvm_send"><p><descrip> <tag> Synopsis </tag> Immediately sends the data in the active message buffer <tag> Usage </tag> <tt>pvm_send (Int_Type, tid, Int_Type msgid)</tt> <tag> Description </tag> See the PVM documentation. <tag> Example </tag> <tscreen><verb> pvm_send (tid, msgid); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_recv" name="pvm_recv"></tt> </descrip><p> <sect><bf>pvm_recv</bf><label id="pvm_recv"><p><descrip> <tag> Synopsis </tag> Receive a message <tag> Usage </tag> <tt>bufid = pvm_recv (Int_Type tid, Int_Type msgtag)</tt> <tag> Description </tag> See the PVM documentation. <tag> Example </tag> <tscreen><verb> bufid = pvm_recv (tid, msgtag); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_send" name="pvm_send"></tt> </descrip><p> <sect><bf>pvm_unpack</bf><label id="pvm_unpack"><p><descrip> <tag> Synopsis </tag> Unpack the active message buffer into arrays of prescribed data type <tag> Usage </tag> <tt>item = pvm_unpack (Int_Type type_id, Int_Type num)</tt> <tag> Description </tag> See the PVM documentation. <tag> Example </tag> <tscreen><verb> item = pvm_unpack (type, num); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_pack" name="pvm_pack"></tt> </descrip><p> <sect><bf>pvm_psend</bf><label id="pvm_psend"><p><descrip> <tag> Synopsis </tag> Pack and send data <tag> Usage </tag> <tt>pvm_psend (Int_Type tid, Int_Type msgid, object [,...])</tt> <tag> Description </tag> See the PVM documentation. <tag> Example </tag> <tscreen><verb> pvm_psend (tid, msgid, data); </verb></tscreen> <tag> Notes </tag> Unlike the <tt>pvm_send</tt> function in the PVM library, this function does not operate asynchronously. <tag> See Also </tag> <tt><ref id="pvm_send" name="pvm_send">, <ref id="pvm_initsend" name="pvm_initsend">, <ref id="pvm_pack" name="pvm_pack">, <ref id="pvm_recv" name="pvm_recv"></tt> </descrip><p> <sect><bf>pvm_addhosts</bf><label id="pvm_addhosts"><p><descrip> <tag> Synopsis </tag> Add one or more hosts to the PVM server <tag> Usage </tag> <tt>Int_Type[] = pvm_addhosts (String_Type[] hosts)</tt> <tag> Description </tag> See the PVM documentation. <tag> Example </tag> <tscreen><verb> tids = pvm_addhosts (["vex", "verus", "aluche"]); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_addhosts" name="pvm_addhosts">, <ref id="pvm_config" name="pvm_config">, <ref id="pvm_delhosts" name="pvm_delhosts"></tt> </descrip><p> <sect><bf>pvm_delhosts</bf><label id="pvm_delhosts"><p><descrip> <tag> Synopsis </tag> Delete one or more hosts from the PVM server <tag> Usage </tag> <tt>pvm_delhosts (String_Type[] hosts)</tt> <tag> Description </tag> See the PVM documentation. <tag> Example </tag> <tscreen><verb> pvm_delhosts (["vex", "verus"]); </verb></tscreen> <tag> See Also </tag> <tt><ref id="pvm_delhosts" name="pvm_delhosts">, <ref id="pvm_config" name="pvm_config">, <ref id="pvm_kill" name="pvm_kill"></tt> </descrip><p> <chapt>Module Symbols Lacking Documentation<p> Although many more low-level PVM intrinsic functions are provided by the S-Lang module, not all of S-Lang interfaces have been documented. See the PVM documentation for information on the following functions: <tscreen><verb> pvm_delhost pvm_export pvm_freebuf pvm_freecontext pvm_getcontext pvm_newcontext pvm_setcontext pvm_getopt pvm_nrecv pvm_sendsig pvm_tidtohost pvm_setopt pvm_config pvm_getrbuf pvm_getsbuf pvm_halt pvm_tasks pvm_kill pvm_mstat pvm_pstat pvm_mcast pvm_addhost pvm_archcode pvm_probe pvm_bufinfo pvm_notify pvm_unpack pvm_send pvm_recv pvm_pack pvm_initsend pvm_exit pvm_mytid pvm_parent pvm_spawn pvm_barrier pvm_getinst pvm_bcast pvm_gettid pvm_gsize pvm_joingroup pvm_lvgroup pvm_settmask pvm_tev_mask_init pvm_tev_mask_set pvm_sigterm_enable </verb></tscreen> Similarly, the following PVM intrinsic constants are provided by the S-Lang module but are documented only through the PVM documentation. <tscreen><verb> PvmDataDefault PvmDataRaw PvmDataInPlace PvmDataTrace PvmTaskDefault PvmTaskHost PvmTaskArch PvmTaskDebug PvmTaskTrace PvmMppFront PvmHostCompl PvmNoSpawnParent PvmTaskExit PvmHostDelete PvmHostAdd PvmRouteAdd PvmRouteDelete PvmNotifyCancel PvmRoute PvmDontRoute PvmAllowDirect PvmRouteDirect PvmDebugMask PvmAutoErr PvmOutputTid PvmOutputCode PvmTraceTid PvmTraceCode PvmTraceBuffer PvmTraceOptions PvmTraceFull PvmTraceTime PvmTraceCount PvmFragSize PvmResvTids PvmSelfOutputTid PvmSelfOutputCode PvmSelfTraceTid PvmSelfTraceCode PvmSelfTraceBuffer PvmSelfTraceOptions PvmShowTids PvmPollType PvmPollConstant PvmPollSleep PvmPollTime PvmOutputContext PvmTraceContext PvmSelfOutputContext PvmSelfTraceContext PvmNoReset PvmTaskSelf PvmTaskChild PvmBaseContext PvmMboxDefault PvmMboxPersistent PvmMboxMultiInstance PvmMboxOverWritable PvmMboxFirstAvail PvmMboxReadAndDelete PvmMboxWaitForInfo PvmOk PvmBadParam PvmMismatch PvmOverflow PvmNoData PvmNoHost PvmNoFile PvmDenied PvmNoMem PvmBadMsg PvmSysErr PvmNoBuf PvmNoSuchBuf PvmNullGroup PvmDupGroup PvmNoGroup PvmNotInGroup PvmNoInst PvmHostFail PvmNoParent PvmNotImpl PvmDSysErr PvmBadVersion PvmOutOfRes PvmDupHost PvmCantStart PvmAlready PvmNoTask PvmNotFound PvmExists PvmHostrNMstr PvmParentNotSet PvmNoEntry PvmDupEntry TEV_MCAST TEV_SEND TEV_RECV TEV_NRECV </verb></tscreen> </book> ��������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/doc/help/���������������������������������������������������������������������������������0000755�0026061�0026061�00000000000�10330414315�014256� 5����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/doc/help/pvm.hlp��������������������������������������������������������������������������0000644�0026061�0026061�00000030754�10330414270�015576� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm_send_obj SYNOPSIS Pack and send data objects USAGE pvm_send (Int_Type tid, Int_Type msgid, object [,...]) DESCRIPTION This function is much like `pvm_psend' except that it sends additional type information with each object. Using this function paired with `pvm_recv_obj' simplifies sending aggregate data objects such as structures and removes the need for the receiver to specify datatypes explicitly. EXAMPLE To send a S-Lang structure to another process: variable obj = struct {name, x, y, data}; ... pvm_send_obj (tid, msgid, obj); SEE ALSO pvm_recv_obj, pvm_psend, pvm_unpack -------------------------------------------------------------- pvm_recv_obj SYNOPSIS Receive data objects from `pvm_send_obj' USAGE obj = pvm_recv_obj () DESCRIPTION This function receives an object sent by `pvm_send_obj' and returns a slang object of the same type that was sent. It simplifies sending aggregate data types such as structures. EXAMPLE To receive a S-Lang object sent by another process via `pvm_send_obj': obj = pvm_recv_obj (); SEE ALSO pvm_send_obj, pvm_psend, pvm_unpack -------------------------------------------------------------- pvm_config SYNOPSIS Returns information about the present virtual machine configuration USAGE Struct_Type = pvm_config () DESCRIPTION See the PVM documentation. EXAMPLE h = pvm_config (); SEE ALSO pvm_kill -------------------------------------------------------------- pvm_kill SYNOPSIS Terminates a specified PVM process USAGE pvm_kill (Int_Type tid) DESCRIPTION See the PVM documentation. EXAMPLE pvm_kill (tid); SEE ALSO pvm_config -------------------------------------------------------------- pvm_initsend SYNOPSIS Clear default send buffer and specify message encoding USAGE bufid = pvm_initsend (Int_Type encoding) DESCRIPTION See the PVM documentation. EXAMPLE bufid = pvm_initsend (PvmDataDefault); SEE ALSO pvm_send -------------------------------------------------------------- pvm_pack SYNOPSIS Pack the active message buffer with arrays of prescribed data type USAGE pvm_pack (object) DESCRIPTION See the PVM documentation. EXAMPLE pvm_pack (x); SEE ALSO pvm_unpack -------------------------------------------------------------- pvm_send SYNOPSIS Immediately sends the data in the active message buffer USAGE pvm_send (Int_Type, tid, Int_Type msgid) DESCRIPTION See the PVM documentation. EXAMPLE pvm_send (tid, msgid); SEE ALSO pvm_recv -------------------------------------------------------------- pvm_recv SYNOPSIS Receive a message USAGE bufid = pvm_recv (Int_Type tid, Int_Type msgtag) DESCRIPTION See the PVM documentation. EXAMPLE bufid = pvm_recv (tid, msgtag); SEE ALSO pvm_send -------------------------------------------------------------- pvm_unpack SYNOPSIS Unpack the active message buffer into arrays of prescribed data type USAGE item = pvm_unpack (Int_Type type_id, Int_Type num) DESCRIPTION See the PVM documentation. EXAMPLE item = pvm_unpack (type, num); SEE ALSO pvm_pack -------------------------------------------------------------- pvm_psend SYNOPSIS Pack and send data USAGE pvm_psend (Int_Type tid, Int_Type msgid, object [,...]) DESCRIPTION See the PVM documentation. EXAMPLE pvm_psend (tid, msgid, data); NOTES Unlike the `pvm_send' function in the PVM library, this function does not operate asynchronously. SEE ALSO pvm_send, pvm_initsend, pvm_pack, pvm_recv -------------------------------------------------------------- pvm_addhosts SYNOPSIS Add one or more hosts to the PVM server USAGE Int_Type[] = pvm_addhosts (String_Type[] hosts) DESCRIPTION See the PVM documentation. EXAMPLE tids = pvm_addhosts (["vex", "verus", "aluche"]); SEE ALSO pvm_addhosts, pvm_config, pvm_delhosts -------------------------------------------------------------- pvm_delhosts SYNOPSIS Delete one or more hosts from the PVM server USAGE pvm_delhosts (String_Type[] hosts) DESCRIPTION See the PVM documentation. EXAMPLE pvm_delhosts (["vex", "verus"]); SEE ALSO pvm_delhosts, pvm_config, pvm_kill -------------------------------------------------------------- pvm_ms_kill SYNOPSIS Send a "task complete" message to a specific task USAGE pvm_ms_kill (Int_Type mtid, Int_Type stid) DESCRIPTION This function may be used to send a "task complete" message to a specific PVM process. The first argument gives the task identifier of the destination process. The second argument gives the task identifier of the sending process. EXAMPLE tid = pvm_mytid (); ptid = pvm_parent (); pvm_ms_kill (ptid, tid); SEE ALSO pvm_ms_slave_exit -------------------------------------------------------------- pvm_ms_set_num_processes_per_host SYNOPSIS Set the maximum number of simultaneous processes per host USAGE pvm_ms_set_num_processes_per_host (Int_Type num_processes) DESCRIPTION This function is used to set the maximum number of simultaneous processes per host. The master process normally runs as many simultaneous processes as possible; by setting the maximum number of simultaneous processes per host, one can limit the processing load per host. EXAMPLE pvm_ms_set_num_processes_per_host (2); SEE ALSO pvm_ms_run_master -------------------------------------------------------------- pvm_ms_set_debug SYNOPSIS Set the debug flag USAGE pvm_ms_set_debug (Int_Type debug) DESCRIPTION This function may be used to control whether debugging information is printed out during execution. Debugging information is printed if the flag is non-zero. EXAMPLE pvm_ms_set_debug (1); SEE ALSO pvm_ms_set_num_processes_per_host -------------------------------------------------------------- pvm_ms_slave_exit SYNOPSIS Cause a normal exit of a slave process from the PVM USAGE pvm_ms_slave_exit (Int_Type exit_status) DESCRIPTION To exit the PVM, a slave process calls this function to send its exit status to the parent process and to notify the local <code>pvmd</code> of its exit. EXAMPLE pvm_ms_slave_exit (exit_status); SEE ALSO pvm_ms_run_slave -------------------------------------------------------------- pvm_ms_run_slave SYNOPSIS Execute the slave's assigned task in a subshell, then exit the PVM USAGE pvm_ms_run_slave (String_Type argv[]) DESCRIPTION A slave process calls this function to run a command in a subshell and then exit the PVM. The command line is constructed by concatenting the elements of an array of strings, `argv', delimited by spaces. The integer return value from the `system' call provides the exit status for the slave process. After sending this value to its parent process, the slave notifies the PVM and exits. EXAMPLE pvm_ms_run_slave (argv); SEE ALSO pvm_ms_slave_exit -------------------------------------------------------------- pvm_ms_run_master SYNOPSIS Submit a list of tasks to the PVM USAGE Struct_Type exit_status[] = pvm_ms_run_master (String_Type pgms[]) DESCRIPTION This function is used to submit a managed list of tasks to the PVM. The task list manager will try to ensure that all tasks are completed and, upon completion of the task list, will return an array of structures containing information about the results of each task. EXAMPLE To run the Unix command <it>ps xu</it> on a number of different hosts: variable slave_argv = Array_Type[n]; slave_argv[*] = ["ps", "axu"]; exit_status = pvm_ms_run_master (slave_argv); SEE ALSO pvm_ms_add_new_slave -------------------------------------------------------------- pvm_ms_add_new_slave SYNOPSIS Add a new slave to the managed list USAGE pvm_ms_add_new_slave (String_Type argv[]) DESCRIPTION This function may be used to add a new slave process while pvm_ms_run_master() is running, usually as a result of handling a message. EXAMPLE pvm_ms_add_new_slave ("vex"); SEE ALSO pvm_ms_run_master -------------------------------------------------------------- pvm_ms_set_message_callback SYNOPSIS Set a callback for handling user-defined messages USAGE pvm_ms_set_message_callback (Ref_Type func) DESCRIPTION This function may be used to handle user-defined messages be sent from slave processes back to the master process. EXAMPLE static define handle_user_message (msgid, tid) { switch (msgid) { case USER_SLAVE_RESULT: recv_results (tid); start_task (tid); } { case USER_SLAVE_READY: start_task (tid); } { % default: return 0; } return 1; } pvm_ms_set_message_callback (&handle_user_message); SEE ALSO pvm_ms_set_idle_host_callback, pvm_ms_set_slave_exit_failed_callback -------------------------------------------------------------- pvm_ms_set_slave_exit_failed_callback SYNOPSIS Set a hook to be called when a slave exits on failure USAGE pvm_ms_set_slave_exit_failed_callback (Ref_Type func) DESCRIPTION This function may be used to have the master process perform a specified action whenever a slave process exits without having completed its assigned task. This is primarily useful in the context where each command-line submitted to `pvm_ms_run_master' represents a task which itself communicates with the PVM, performing potentially many additional tasks which are independently managed by the process that called `pvm_ms_run_master'. For example, consider a case in which initialization of slave processes is very expensive but, once initialized, a single slave process may perform many tasks. In this case, the master process may spawn a small number of slaves and then repeatedly send each slave a task to perform. Each slave performs its task, sends the result to the master, and then waits for another task. The managing process must keep track of which tasks have been completed and which remain. If a slave exits while working on a task, it is important that the manager process be notified that that task in progress was not completed and that it should be reassigned to another slave. EXAMPLE static define slave_exit_failed_callback (msgid, tid) { variable t = find_task_tid (tid); if (orelse {t == NULL} {t.status == FINISHED}) return; % mark the unfinished task "READY" so that it will % be assigned to another slave t.tid = -1; t.status = READY; } pvm_ms_set_slave_exit_failed_callback (&slave_exit_failed_callback); SEE ALSO pvm_ms_set_message_callback -------------------------------------------------------------- pvm_ms_set_slave_spawned_callback SYNOPSIS Set the slave spawned callback hook USAGE pvm_ms_set_slave_spawned_callback (Ref_Type func) DESCRIPTION This function may be used to specify a callback function to be called whenever a slave process has been spawned. The callback function will be called with three arguments: the slave task id, the name of the host running the slave process, and an array of strings representing the argument list passed to the slave. EXAMPLE static define slave_spawned_callback (tid, host, argv) { vmessage ("Slave running %s spawned on %s with task-id %d", argv[0], host, tid); } pvm_ms_set_slave_spawned_callback (&slave_spawned_callback); SEE ALSO pvm_ms_set_message_callback -------------------------------------------------------------- pvm_ms_set_idle_host_callback SYNOPSIS Set the idle host hook USAGE pvm_ms_set_idle_host_callback (Ref_Type func) DESCRIPTION This function may be used to specify a callback function to be called whenever a new host is added to the virtual machine. EXAMPLE static define idle_host_callback () { loop (Max_Num_Processes_Per_Host) { variable slave_argv = build_slave_argv (0); pvm_ms_add_new_slave (slave_argv); } } pvm_ms_set_idle_host_callback (&idle_host_callback); SEE ALSO pvm_ms_set_message_callback -------------------------------------------------------------- pvm_ms_set_hosts SYNOPSIS Set list of hosts to use USAGE pvm_ms_set_hosts (String_Type hosts[]) DESCRIPTION This function may be used to specify which hosts will be used to perform distributed calculations. The default is to use all hosts in the current PVM. EXAMPLE pvm_ms_set_hosts (["vex", "pirx", "aluche"]); SEE ALSO pvm_addhosts -------------------------------------------------------------- ��������������������pvm-0.1.5/COPYRIGHT���������������������������������������������������������������������������������0000644�0026061�0026061�00000002603�07753241224�014071� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Copyright (c) 2003 Massachusetts Institute of Technology This software was developed by the MIT Center for Space Research under contract SV1-61010 from the Smithsonian Institution. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in the supporting documentation, and that the name of the Massachusetts Institute of Technology not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. The Massachusetts Institute of Technology makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. THE MASSACHUSETTS INSTITUTE OF TECHNOLOGY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE MASSACHUSETTS INSTITUTE OF TECHNOLOGY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. �����������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/ChangeLog���������������������������������������������������������������������������������0000644�0026061�0026061�00000000701�10240261544�014335� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������2005-5-10 John Houck <houck@vex.mit.edu> * Generate and install a help file, pvm.hlp 2005-4-27 John Houck <houck@space.mit.edu> * Various updates to support slang2. 2004-2-14 John Houck <houck@space.mit.edu> * src/pvm.sl (pack_assoc): pvm_send_obj and pvm_recv_obj now support sending and receiving associative arrays. New functions: pack_assoc, pack_one_assoc, unpack_assoc, unpack_one_assoc ���������������������������������������������������������������pvm-0.1.5/INSTALL.txt�������������������������������������������������������������������������������0000644�0026061�0026061�00000017051�07753241224�014450� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/README������������������������������������������������������������������������������������0000644�0026061�0026061�00000000333�10330414213�013435� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ./configure --prefix=$CXC/$ARCH --with-slang=$CXC/$ARCH \ --with-pvm3lib='$(PVM_ROOT)/lib/$(PVM_ARCH)' \ --with-pvm3inc='$(PVM_ROOT)/include' To build on solaris, need libraries -lnsl -lsocket �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/configure���������������������������������������������������������������������������������0000755�0026061�0026061�00000776627�10330413427�014524� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59. # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="src/pvm-module.c" ac_default_prefix=/usr/local # Factoring default headers for most tests. ac_includes_default="\ #include <stdio.h> #if HAVE_SYS_TYPES_H # include <sys/types.h> #endif #if HAVE_SYS_STAT_H # include <sys/stat.h> #endif #if STDC_HEADERS # include <stdlib.h> # include <stddef.h> #else # if HAVE_STDLIB_H # include <stdlib.h> # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include <memory.h> # endif # include <string.h> #endif #if HAVE_STRINGS_H # include <strings.h> #endif #if HAVE_INTTYPES_H # include <inttypes.h> #else # if HAVE_STDINT_H # include <stdint.h> # endif #endif #if HAVE_UNISTD_H # include <unistd.h> #endif" ac_subst_vars='RPATH SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os RANLIB ac_ct_RANLIB INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA SET_MAKE CONFIG_DIR CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP DYNAMIC_LINK_LIB ELF_CC ELF_CFLAGS ELF_LINK ELF_LINK_CMD ELF_DEP_LIBS DYNAMIC_LINK_FLAGS CC_SHARED ELFLIB ELFLIB_MAJOR ELFLIB_MAJOR_MINOR X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS SLANG_LIB SLANG_INC PVM3_LIB PVM3_INC slang_version slang_major_version slang_minor_version slang_patchlevel_version MODULE_INSTALL_DIR SL_FILES_INSTALL_DIR LIBSOCKET LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-x use the X Window System --with-slang=DIR Use DIR/lib and DIR/include for slang --with-slanglib=DIR slang library in DIR --with-slanginc=DIR slang include files in DIR --with-pvm3=DIR Use DIR/lib and DIR/include for pvm3 --with-pvm3lib=DIR pvm3 library in DIR --with-pvm3inc=DIR pvm3 include files in DIR Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd "$ac_popdir" done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in autoconf $srcdir/autoconf; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in autoconf $srcdir/autoconf" >&5 echo "$as_me: error: cannot find install-sh or install.sh in autoconf $srcdir/autoconf" >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi #These variable are initialized by JD init function CONFIG_DIR=`pwd` cd $srcdir if test "`pwd`" != "$CONFIG_DIR" then { { echo "$as_me:$LINENO: error: \"This software does not support configuring from another directory. See the INSTALL file\"" >&5 echo "$as_me: error: \"This software does not support configuring from another directory. See the INSTALL file\"" >&2;} { (exit 1); exit 1; }; } fi # Note: these will differ if one is a symbolic link if test -f /usr/bin/dirname; then JD_Above_Dir=`dirname $CONFIG_DIR` else # system is a loser JD_Above_Dir=`cd ..;pwd` fi JD_Above_Dir2=`cd ..;pwd` echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5 (eval $ac_compiler --version </dev/null >&5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5 (eval $ac_compiler -v </dev/null >&5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5 (eval $ac_compiler -V </dev/null >&5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <stdarg.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include <stdlib.h> int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_cv_c_compiler_gnu = yes; then echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5 echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6 if test "${ac_cv_prog_gcc_traditional+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_pattern="Autoconf.*'x'" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <sgtty.h> Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <termio.h> Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5 echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6 if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi echo "$as_me:$LINENO: checking for library containing strerror" >&5 echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6 if test "${ac_cv_search_strerror+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_strerror=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char strerror (); int main () { strerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_strerror="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_strerror" = no; then for ac_lib in cposix; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char strerror (); int main () { strerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_strerror="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 echo "${ECHO_T}$ac_cv_search_strerror" >&6 if test "$ac_cv_search_strerror" != no; then test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS" fi echo "$as_me:$LINENO: checking for AIX" >&5 echo $ECHO_N "checking for AIX... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef _AIX yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define _ALL_SOURCE 1 _ACEOF else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest* cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef hpux yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then cat >>confdefs.h <<\_ACEOF #define _HPUX_SOURCE 1 _ACEOF if test "$CC" = cc; then CC="cc -Ae"; fi fi rm -f conftest* echo "$as_me:$LINENO: checking C compiler that understands ANSI prototypes" >&5 echo $ECHO_N "checking C compiler that understands ANSI prototypes... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { extern int silly (int); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: $CC looks ok. Good." >&5 echo "${ECHO_T}$CC looks ok. Good." >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: $CC is not a good enough compiler" >&5 echo "${ECHO_T}$CC is not a good enough compiler" >&6 { { echo "$as_me:$LINENO: error: Set env variable CC to your ANSI compiler and rerun configure." >&5 echo "$as_me: error: Set env variable CC to your ANSI compiler and rerun configure." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <float.h> int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <string.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <stdlib.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <ctype.h> #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done DYNAMIC_LINK_LIB="" if test "${ac_cv_header_dlfcn_h+set}" = set; then echo "$as_me:$LINENO: checking for dlfcn.h" >&5 echo $ECHO_N "checking for dlfcn.h... $ECHO_C" >&6 if test "${ac_cv_header_dlfcn_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_dlfcn_h" >&5 echo "${ECHO_T}$ac_cv_header_dlfcn_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking dlfcn.h usability" >&5 echo $ECHO_N "checking dlfcn.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <dlfcn.h> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking dlfcn.h presence" >&5 echo $ECHO_N "checking dlfcn.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <dlfcn.h> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: dlfcn.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: dlfcn.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: dlfcn.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: dlfcn.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: dlfcn.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: dlfcn.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: dlfcn.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: dlfcn.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: dlfcn.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: dlfcn.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: dlfcn.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: dlfcn.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: dlfcn.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: dlfcn.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: dlfcn.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: dlfcn.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for dlfcn.h" >&5 echo $ECHO_N "checking for dlfcn.h... $ECHO_C" >&6 if test "${ac_cv_header_dlfcn_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_dlfcn_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_dlfcn_h" >&5 echo "${ECHO_T}$ac_cv_header_dlfcn_h" >&6 fi if test $ac_cv_header_dlfcn_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_DLFCN_H 1 _ACEOF echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then DYNAMIC_LINK_LIB="-ldl" cat >>confdefs.h <<\_ACEOF #define HAVE_DLOPEN 1 _ACEOF else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_DLOPEN 1 _ACEOF fi if test "$ac_cv_func_dlopen" != yes then { echo "$as_me:$LINENO: WARNING: cannot perform dynamic linking" >&5 echo "$as_me: WARNING: cannot perform dynamic linking" >&2;} fi fi fi ELFLIB="lib\$(THIS_LIB).so" ELFLIB_MAJOR="\$(ELFLIB).\$(ELF_MAJOR_VERSION)" ELFLIB_MAJOR_MINOR="\$(ELFLIB).\$(ELF_MAJOR_VERSION).\$(ELF_MINOR_VERSION)" if test "$GCC" = yes then if test X"$CFLAGS" = X then CFLAGS="-O2" fi fi case "$host_os" in *linux* ) DYNAMIC_LINK_FLAGS="-Wl,-export-dynamic" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fPIC" ELF_LINK="\$(CC) \$(LDFLAGS) -shared -Wl,-soname#" ELF_LINK_CMD="\$(ELF_LINK),\$(ELFLIB_MAJOR)" ELF_DEP_LIBS="\$(DL_LIB) -lm -lc" CC_SHARED="\$(CC) \$(CFLAGS) -shared -fPIC" ;; *solaris* ) if test "$GCC" = yes then DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fPIC" ELF_LINK="\$(CC) \$(LDFLAGS) -shared -Wl,-ztext -Wl,-h#" ELF_LINK_CMD="\$(ELF_LINK),\$(ELFLIB_MAJOR)" ELF_DEP_LIBS="\$(DL_LIB) -lm -lc" CC_SHARED="\$(CC) \$(CFLAGS) -G -fPIC" else DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -K PIC" ELF_LINK="\$(CC) \$(LDFLAGS) -G -h#" ELF_LINK_CMD="\$(ELF_LINK)\$(ELFLIB_MAJOR)" ELF_DEP_LIBS="\$(DL_LIB) -lm -lc" CC_SHARED="\$(CC) \$(CFLAGS) -G -K PIC" fi ;; # osr5 or unixware7 with current or late autoconf *sco3.2v5* | *unixware-5* | *sco-sysv5uw7*) if test "$GCC" = yes then DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fPIC" ELF_LINK="\$(CC) \$(LDFLAGS) -shared -Wl,-h#" ELF_LINK_CMD="\$(ELF_LINK),\$(ELFLIB_MAJOR)" ELF_DEP_LIBS= CC_SHARED="\$(CC) \$(CFLAGS) -G -fPIC" else DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -K pic" # ELF_LINK="ld -G -z text -h#" ELF_LINK="\$(CC) \$(LDFLAGS) -G -z text -h#" ELF_LINK_CMD="\$(ELF_LINK)\$(ELFLIB_MAJOR)" ELF_DEP_LIBS= CC_SHARED="\$(CC) \$(CFLAGS) -G -K pic" fi ;; *irix6.5* ) echo "Note: ELF compiler for host_os=$host_os may not be correct" echo "double-check: 'mode_t', 'pid_t' may be wrong!" if test "$GCC" = yes then # not tested DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fPIC" ELF_LINK="\$(CC) \$(LDFLAGS) -shared -Wl,-h#" ELF_LINK_CMD="\$(ELF_LINK),\$(ELFLIB_MAJOR)" ELF_DEP_LIBS= CC_SHARED="\$(CC) \$(CFLAGS) -shared -fPIC" else DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -K pic" # default anyhow ELF_LINK="\$(CC) \$(LDFLAGS) -shared -o #" ELF_LINK_CMD="\$(ELF_LINK)\$(ELFLIB_MAJOR)" ELF_DEP_LIBS= CC_SHARED="\$(CC) \$(CFLAGS) -shared -K pic" fi ;; *darwin* ) DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fno-common" ELF_LINK="\$(CC) \$(LDFLAGS) -dynamiclib" ELF_LINK_CMD="\$(ELF_LINK) -install_name \$(install_lib_dir)/\$(ELFLIB_MAJOR) -compatibility_version \$(ELF_MAJOR_VERSION) -current_version \$(ELF_MAJOR_VERSION).\$(ELF_MINOR_VERSION)" ELF_DEP_LIBS="\$(LDFLAGS) \$(DL_LIB)" CC_SHARED="\$(CC) -bundle -flat_namespace -undefined suppress \$(CFLAGS) -fno-common" ELFLIB="lib\$(THIS_LIB).dylib" ELFLIB_MAJOR="lib\$(THIS_LIB).\$(ELF_MAJOR_VERSION).dylib" ELFLIB_MAJOR_MINOR="lib\$(THIS_LIB).\$(ELF_MAJOR_VERSION).\$(ELF_MINOR_VERSION).dylib" ;; *freebsd* ) ELFLIB_MAJOR_MINOR="\$(ELFLIB).\$(ELF_MAJOR_VERSION)" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fPIC" if test "X$PORTOBJFORMAT" = "Xelf" ; then ELF_LINK="\$(CC) \$(LDFLAGS) -shared -Wl,-soname,\$(ELFLIB_MAJOR)" else ELF_LINK="ld -Bshareable -x" fi ELF_LINK_CMD="\$(ELF_LINK)" ELF_DEP_LIBS="\$(DL_LIB) -lm" CC_SHARED="\$(CC) \$(CFLAGS) -shared -fPIC" ;; * ) echo "Note: ELF compiler for host_os=$host_os may be wrong" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fPIC" ELF_LINK="\$(CC) \$(LDFLAGS) -shared" ELF_LINK_CMD="\$(ELF_LINK)" ELF_DEP_LIBS="\$(DL_LIB) -lm -lc" CC_SHARED="\$(CC) \$(CFLAGS) -shared -fPIC" esac case "$host_cpu" in *alpha* ) if test "$GCC" = yes then IEEE_CFLAGS="-mieee" else IEEE_CFLAGS="-ieee_with_no_inexact" fi ;; * ) IEEE_CFLAGS="" esac if test "x$ac_path_x_has_been_run" != xyes; then echo "$as_me:$LINENO: checking for X" >&5 echo $ECHO_N "checking for X... $ECHO_C" >&6 ac_path_x_has_been_run=yes # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then withval="$with_x" fi; # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then # Both variables are already set. have_x=yes else if test "${ac_cv_have_x+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -fr conftest.dir if mkdir conftest.dir; then cd conftest.dir # Make sure to not put "make" in the Imakefile rules, since we grep it out. cat >Imakefile <<'_ACEOF' acfindx: @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' _ACEOF if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl; do if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && test -f $ac_im_libdir/libX11.$ac_extension; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /lib) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -fr conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for a specified header file. # First, try using that file with no special directory specified. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <X11/Intrinsic.h> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # We can compile using X headers with no special include directory. ac_x_includes= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Intrinsic.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lXt $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <X11/Intrinsic.h> int main () { XtMalloc (0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS=$ac_save_LIBS for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl; do if test -r $ac_dir/libXt.$ac_extension; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then # Didn't find X anywhere. Cache the known absence of X. ac_cv_have_x="have_x=no" else # Record where we found X for the cache. ac_cv_have_x="have_x=yes \ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" fi fi fi eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then echo "$as_me:$LINENO: result: $have_x" >&5 echo "${ECHO_T}$have_x" >&6 no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes \ ac_x_includes=$x_includes ac_x_libraries=$x_libraries" # It might be that x_includes is empty (headers are found in the # standard search path. Then output the corresponding message ac_out_x_includes=$x_includes test "x$x_includes" = x && ac_out_x_includes="in standard search path" echo "$as_me:$LINENO: result: libraries $x_libraries, headers $ac_out_x_includes" >&5 echo "${ECHO_T}libraries $x_libraries, headers $ac_out_x_includes" >&6 fi fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. cat >>confdefs.h <<\_ACEOF #define X_DISPLAY_MISSING 1 _ACEOF X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . case `(uname -sr) 2>/dev/null` in "SunOS 5"*) echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5 echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6 ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_nospace=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_R_nospace=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_R_nospace = yes; then echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_space=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_R_space=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_R_space = yes; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 X_LIBS="$X_LIBS -R $x_libraries" else echo "$as_me:$LINENO: result: neither works" >&5 echo "${ECHO_T}neither works" >&6 fi fi LIBS=$ac_xsave_LIBS esac fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XOpenDisplay (); int main () { XOpenDisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); int main () { dnet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dnet_dnet_ntoa=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); int main () { dnet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_stub_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. echo "$as_me:$LINENO: checking for gethostbyname" >&5 echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6 if test "${ac_cv_func_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define gethostbyname to an innocuous variant, in case <limits.h> declares gethostbyname. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define gethostbyname innocuous_gethostbyname /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gethostbyname (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif #undef gethostbyname /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_gethostbyname) || defined (__stub___gethostbyname) choke me #else char (*f) () = gethostbyname; #endif #ifdef __cplusplus } #endif int main () { return f != gethostbyname; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_gethostbyname=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6 if test $ac_cv_func_gethostbyname = no; then echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5 echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6 if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_nsl_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_nsl_gethostbyname=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6 if test $ac_cv_lib_nsl_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5 echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6 if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_bsd_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_bsd_gethostbyname=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6 if test $ac_cv_lib_bsd_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. echo "$as_me:$LINENO: checking for connect" >&5 echo $ECHO_N "checking for connect... $ECHO_C" >&6 if test "${ac_cv_func_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define connect to an innocuous variant, in case <limits.h> declares connect. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define connect innocuous_connect /* System header to define __stub macros and hopefully few prototypes, which can conflict with char connect (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif #undef connect /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_connect) || defined (__stub___connect) choke me #else char (*f) () = connect; #endif #ifdef __cplusplus } #endif int main () { return f != connect; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_connect=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_connect=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5 echo "${ECHO_T}$ac_cv_func_connect" >&6 if test $ac_cv_func_connect = no; then echo "$as_me:$LINENO: checking for connect in -lsocket" >&5 echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6 if test "${ac_cv_lib_socket_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); int main () { connect (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_socket_connect=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socket_connect=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5 echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6 if test $ac_cv_lib_socket_connect = yes; then X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. echo "$as_me:$LINENO: checking for remove" >&5 echo $ECHO_N "checking for remove... $ECHO_C" >&6 if test "${ac_cv_func_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define remove to an innocuous variant, in case <limits.h> declares remove. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define remove innocuous_remove /* System header to define __stub macros and hopefully few prototypes, which can conflict with char remove (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif #undef remove /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_remove) || defined (__stub___remove) choke me #else char (*f) () = remove; #endif #ifdef __cplusplus } #endif int main () { return f != remove; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_remove=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_remove=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5 echo "${ECHO_T}$ac_cv_func_remove" >&6 if test $ac_cv_func_remove = no; then echo "$as_me:$LINENO: checking for remove in -lposix" >&5 echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6 if test "${ac_cv_lib_posix_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); int main () { remove (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_posix_remove=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_posix_remove=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5 echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6 if test $ac_cv_lib_posix_remove = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. echo "$as_me:$LINENO: checking for shmat" >&5 echo $ECHO_N "checking for shmat... $ECHO_C" >&6 if test "${ac_cv_func_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shmat to an innocuous variant, in case <limits.h> declares shmat. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define shmat innocuous_shmat /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shmat (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif #undef shmat /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shmat) || defined (__stub___shmat) choke me #else char (*f) () = shmat; #endif #ifdef __cplusplus } #endif int main () { return f != shmat; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shmat=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shmat=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5 echo "${ECHO_T}$ac_cv_func_shmat" >&6 if test $ac_cv_func_shmat = no; then echo "$as_me:$LINENO: checking for shmat in -lipc" >&5 echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6 if test "${ac_cv_lib_ipc_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); int main () { shmat (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ipc_shmat=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ipc_shmat=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5 echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6 if test $ac_cv_lib_ipc_shmat = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5 echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6 if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char IceConnectionNumber (); int main () { IceConnectionNumber (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ICE_IceConnectionNumber=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6 if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi if test "X$jd_prefix" = "X" then jd_prefix=$ac_default_prefix if test "X$prefix" != "XNONE" then jd_prefix="$prefix" fi jd_exec_prefix="$jd_prefix" if test "X$exec_prefix" != "XNONE" then jd_exec_prefix="$exec_prefix" fi eval `sh <<EOF prefix=$jd_prefix exec_prefix=$jd_exec_prefix libdir=$libdir includedir=$includedir echo jd_prefix_libdir="\$libdir" jd_prefix_incdir="\$includedir" EOF ` fi echo "$as_me:$LINENO: checking for the slang library and header files " >&5 echo $ECHO_N "checking for the slang library and header files ... $ECHO_C" >&6 jd_slang_include_dir="" jd_slang_library_dir="" jd_with_slang_library="" # Check whether --with-slang or --without-slang was given. if test "${with_slang+set}" = set; then withval="$with_slang" jd_with_slang_arg=$withval else jd_with_slang_arg=unspecified fi; case "x$jd_with_slang_arg" in xno) jd_with_slang_library="no" ;; x) { { echo "$as_me:$LINENO: error: --with-slang requires a value-- try yes or no" >&5 echo "$as_me: error: --with-slang requires a value-- try yes or no" >&2;} { (exit 1); exit 1; }; } ;; xunspecified) ;; xyes) ;; *) jd_slang_include_dir="$jd_with_slang_arg"/include jd_slang_library_dir="$jd_with_slang_arg"/lib ;; esac # Check whether --with-slanglib or --without-slanglib was given. if test "${with_slanglib+set}" = set; then withval="$with_slanglib" jd_with_slanglib_arg=$withval else jd_with_slanglib_arg=unspecified fi; case "x$jd_with_slanglib_arg" in xunspecified) ;; xno) ;; x) { { echo "$as_me:$LINENO: error: --with-slanglib requres a value" >&5 echo "$as_me: error: --with-slanglib requres a value" >&2;} { (exit 1); exit 1; }; } ;; *) jd_slang_library_dir="$jd_with_slanglib_arg" ;; esac # Check whether --with-slanginc or --without-slanginc was given. if test "${with_slanginc+set}" = set; then withval="$with_slanginc" jd_with_slanginc_arg=$withval else jd_with_slanginc_arg=unspecified fi; case "x$jd_with_slanginc_arg" in x) { { echo "$as_me:$LINENO: error: --with-slanginc requres a value" >&5 echo "$as_me: error: --with-slanginc requres a value" >&2;} { (exit 1); exit 1; }; } ;; xunspecified) ;; xno) ;; *) jd_slang_include_dir="$jd_with_slanginc_arg" ;; esac if test X"$jd_with_slang_library" = X then jd_slang_inc_file= jd_with_slang_library="yes" if test "X$jd_slang_inc_file" = "X" then jd_slang_inc_file=slang.h fi if test X"$jd_slang_include_dir" = X then lib_include_dirs="\ $jd_prefix_incdir \ /usr/local/slang/include \ /usr/local/include/slang \ /usr/local/include \ /usr/include/slang \ /usr/slang/include \ /usr/include \ /opt/include/slang \ /opt/slang/include \ /opt/include" for X in $lib_include_dirs do if test -r "$X/$jd_slang_inc_file" then jd_slang_include_dir="$X" break fi done if test X"$jd_slang_include_dir" = X then jd_with_slang_library="no" fi fi if test X"$jd_slang_library_dir" = X then lib_library_dirs="\ $jd_prefix_libdir \ /usr/local/lib \ /usr/local/lib/slang \ /usr/local/slang/lib \ /usr/lib \ /usr/lib/slang \ /usr/slang/lib \ /opt/lib \ /opt/lib/slang \ /opt/slang/lib" for X in $lib_library_dirs do if test -r "$X/libslang.so" -o -r "$X/libslang.a" then jd_slang_library_dir="$X" break fi done if test X"$jd_slang_library_dir" = X then jd_with_slang_library="no" fi fi fi if test "$jd_with_slang_library" = "yes" then echo "$as_me:$LINENO: result: yes: $jd_slang_library_dir and $jd_slang_include_dir" >&5 echo "${ECHO_T}yes: $jd_slang_library_dir and $jd_slang_include_dir" >&6 SLANG_LIB=-L$jd_slang_library_dir if test "X$jd_slang_library_dir" = "X/usr/lib" then SLANG_LIB="" else if test "X$jd_slang_library_dir" != "X" then if test "X$RPATH" = "X" then case "$host_os" in *linux*|*solaris* ) if test "X$GCC" = Xyes then if test "X$ac_R_nospace" = "Xno" then RPATH="-Wl,-R," else RPATH="-Wl,-R" fi else if test "X$ac_R_nospace" = "Xno" then RPATH="-R " else RPATH="-R" fi fi ;; *osf*) if test "X$GCC" = Xyes then RPATH="-Wl,-rpath," else RPATH="-rpath " fi ;; esac if test "X$RPATH" != "X" then RPATH="$RPATH$jd_slang_library_dir" fi else RPATH="$RPATH:$jd_slang_library_dir" fi fi fi SLANG_INC=-I$jd_slang_include_dir if test "X$jd_slang_include_dir" = "X/usr/include" then SLANG_INC="" fi else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SLANG_INC="" SLANG_LIB="" fi if test "$jd_with_slang_library" = "no" then { { echo "$as_me:$LINENO: error: unable to find the slang library and header file $jd_slang_inc_file" >&5 echo "$as_me: error: unable to find the slang library and header file $jd_slang_inc_file" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: checking for the pvm3 library and header files " >&5 echo $ECHO_N "checking for the pvm3 library and header files ... $ECHO_C" >&6 jd_pvm3_include_dir="" jd_pvm3_library_dir="" jd_with_pvm3_library="" # Check whether --with-pvm3 or --without-pvm3 was given. if test "${with_pvm3+set}" = set; then withval="$with_pvm3" jd_with_pvm3_arg=$withval else jd_with_pvm3_arg=unspecified fi; case "x$jd_with_pvm3_arg" in xno) jd_with_pvm3_library="no" ;; x) { { echo "$as_me:$LINENO: error: --with-pvm3 requires a value-- try yes or no" >&5 echo "$as_me: error: --with-pvm3 requires a value-- try yes or no" >&2;} { (exit 1); exit 1; }; } ;; xunspecified) ;; xyes) ;; *) jd_pvm3_include_dir="$jd_with_pvm3_arg"/include jd_pvm3_library_dir="$jd_with_pvm3_arg"/lib ;; esac # Check whether --with-pvm3lib or --without-pvm3lib was given. if test "${with_pvm3lib+set}" = set; then withval="$with_pvm3lib" jd_with_pvm3lib_arg=$withval else jd_with_pvm3lib_arg=unspecified fi; case "x$jd_with_pvm3lib_arg" in xunspecified) ;; xno) ;; x) { { echo "$as_me:$LINENO: error: --with-pvm3lib requres a value" >&5 echo "$as_me: error: --with-pvm3lib requres a value" >&2;} { (exit 1); exit 1; }; } ;; *) jd_pvm3_library_dir="$jd_with_pvm3lib_arg" ;; esac # Check whether --with-pvm3inc or --without-pvm3inc was given. if test "${with_pvm3inc+set}" = set; then withval="$with_pvm3inc" jd_with_pvm3inc_arg=$withval else jd_with_pvm3inc_arg=unspecified fi; case "x$jd_with_pvm3inc_arg" in x) { { echo "$as_me:$LINENO: error: --with-pvm3inc requres a value" >&5 echo "$as_me: error: --with-pvm3inc requres a value" >&2;} { (exit 1); exit 1; }; } ;; xunspecified) ;; xno) ;; *) jd_pvm3_include_dir="$jd_with_pvm3inc_arg" ;; esac if test X"$jd_with_pvm3_library" = X then jd_pvm3_inc_file= jd_with_pvm3_library="yes" if test "X$jd_pvm3_inc_file" = "X" then jd_pvm3_inc_file=pvm3.h fi if test X"$jd_pvm3_include_dir" = X then lib_include_dirs="\ $jd_prefix_incdir \ /usr/local/pvm3/include \ /usr/local/include/pvm3 \ /usr/local/include \ /usr/include/pvm3 \ /usr/pvm3/include \ /usr/include \ /opt/include/pvm3 \ /opt/pvm3/include \ /opt/include" for X in $lib_include_dirs do if test -r "$X/$jd_pvm3_inc_file" then jd_pvm3_include_dir="$X" break fi done if test X"$jd_pvm3_include_dir" = X then jd_with_pvm3_library="no" fi fi if test X"$jd_pvm3_library_dir" = X then lib_library_dirs="\ $jd_prefix_libdir \ /usr/local/lib \ /usr/local/lib/pvm3 \ /usr/local/pvm3/lib \ /usr/lib \ /usr/lib/pvm3 \ /usr/pvm3/lib \ /opt/lib \ /opt/lib/pvm3 \ /opt/pvm3/lib" for X in $lib_library_dirs do if test -r "$X/libpvm3.so" -o -r "$X/libpvm3.a" then jd_pvm3_library_dir="$X" break fi done if test X"$jd_pvm3_library_dir" = X then jd_with_pvm3_library="no" fi fi fi if test "$jd_with_pvm3_library" = "yes" then echo "$as_me:$LINENO: result: yes: $jd_pvm3_library_dir and $jd_pvm3_include_dir" >&5 echo "${ECHO_T}yes: $jd_pvm3_library_dir and $jd_pvm3_include_dir" >&6 PVM3_LIB=-L$jd_pvm3_library_dir if test "X$jd_pvm3_library_dir" = "X/usr/lib" then PVM3_LIB="" else if test "X$jd_pvm3_library_dir" != "X" then if test "X$RPATH" = "X" then case "$host_os" in *linux*|*solaris* ) if test "X$GCC" = Xyes then if test "X$ac_R_nospace" = "Xno" then RPATH="-Wl,-R," else RPATH="-Wl,-R" fi else if test "X$ac_R_nospace" = "Xno" then RPATH="-R " else RPATH="-R" fi fi ;; *osf*) if test "X$GCC" = Xyes then RPATH="-Wl,-rpath," else RPATH="-rpath " fi ;; esac if test "X$RPATH" != "X" then RPATH="$RPATH$jd_pvm3_library_dir" fi else RPATH="$RPATH:$jd_pvm3_library_dir" fi fi fi PVM3_INC=-I$jd_pvm3_include_dir if test "X$jd_pvm3_include_dir" = "X/usr/include" then PVM3_INC="" fi else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 PVM3_INC="" PVM3_LIB="" fi if test "$jd_with_pvm3_library" = "no" then { { echo "$as_me:$LINENO: error: unable to find the pvm3 library and header file $jd_pvm3_inc_file" >&5 echo "$as_me: error: unable to find the pvm3 library and header file $jd_pvm3_inc_file" >&2;} { (exit 1); exit 1; }; } fi slang_h=$jd_slang_include_dir/slang.h echo "$as_me:$LINENO: checking SLANG_VERSION in $slang_h" >&5 echo $ECHO_N "checking SLANG_VERSION in $slang_h... $ECHO_C" >&6 slang_version=`grep "^#define *SLANG_VERSION " $slang_h | awk '{ print $3 }'` slang_major_version=`echo $slang_version | awk '{ print int($1/10000) }'` slang_minor_version=`echo $slang_version $slang_major_version | awk '{ print int(($1 - $2*10000)/100) }'` slang_patchlevel_version=`echo $slang_version $slang_major_version $slang_minor_version | awk '{ print ($1 - $2*10000 - $3*100) }'` echo "$as_me:$LINENO: result: $slang_major_version.$slang_minor_version.$slang_patchlevel_version" >&5 echo "${ECHO_T}$slang_major_version.$slang_minor_version.$slang_patchlevel_version" >&6 if test "X$slang_major_version" = "X1" then MODULE_INSTALL_DIR="$libdir/slang/modules" else MODULE_INSTALL_DIR="$libdir/slang/v$slang_major_version/modules" fi SL_FILES_INSTALL_DIR=$datadir/slsh/local-packages for ac_header in \ stdlib.h \ unistd.h \ do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for socket in -lsocket" >&5 echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6 if test "${ac_cv_lib_socket_socket+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char socket (); int main () { socket (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_socket_socket=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socket_socket=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5 echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6 if test $ac_cv_lib_socket_socket = yes; then LIBSOCKET="-lnsl -lsocket" fi #AC_CHECK_LIB(bsd, gethostbyname, [LIBSOCKET="-lbsd"]) dnl for LynxOS echo "$as_me:$LINENO: checking for short" >&5 echo $ECHO_N "checking for short... $ECHO_C" >&6 if test "${ac_cv_type_short+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((short *) 0) return 0; if (sizeof (short)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_short=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_short=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 echo "${ECHO_T}$ac_cv_type_short" >&6 echo "$as_me:$LINENO: checking size of short" >&5 echo $ECHO_N "checking size of short... $ECHO_C" >&6 if test "${ac_cv_sizeof_short+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_short" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_short=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (short), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 echo "$as_me: error: internal error: not reached in cross-compile" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (short)); } unsigned long ulongval () { return (long) (sizeof (short)); } #include <stdio.h> #include <stdlib.h> int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (short))) < 0) { long i = longval (); if (i != ((long) (sizeof (short)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (short)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_short=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (short), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_short=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 echo "${ECHO_T}$ac_cv_sizeof_short" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF echo "$as_me:$LINENO: checking for int" >&5 echo $ECHO_N "checking for int... $ECHO_C" >&6 if test "${ac_cv_type_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((int *) 0) return 0; if (sizeof (int)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 echo "${ECHO_T}$ac_cv_type_int" >&6 echo "$as_me:$LINENO: checking size of int" >&5 echo $ECHO_N "checking size of int... $ECHO_C" >&6 if test "${ac_cv_sizeof_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 echo "$as_me: error: internal error: not reached in cross-compile" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (int)); } unsigned long ulongval () { return (long) (sizeof (int)); } #include <stdio.h> #include <stdlib.h> int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (int))) < 0) { long i = longval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_int=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_int=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF echo "$as_me:$LINENO: checking for long" >&5 echo $ECHO_N "checking for long... $ECHO_C" >&6 if test "${ac_cv_type_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((long *) 0) return 0; if (sizeof (long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 echo "${ECHO_T}$ac_cv_type_long" >&6 echo "$as_me:$LINENO: checking size of long" >&5 echo $ECHO_N "checking size of long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 echo "$as_me: error: internal error: not reached in cross-compile" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long)); } unsigned long ulongval () { return (long) (sizeof (long)); } #include <stdio.h> #include <stdlib.h> int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF echo "$as_me:$LINENO: checking for float" >&5 echo $ECHO_N "checking for float... $ECHO_C" >&6 if test "${ac_cv_type_float+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((float *) 0) return 0; if (sizeof (float)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_float=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_float=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_float" >&5 echo "${ECHO_T}$ac_cv_type_float" >&6 echo "$as_me:$LINENO: checking size of float" >&5 echo $ECHO_N "checking size of float... $ECHO_C" >&6 if test "${ac_cv_sizeof_float+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_float" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (float))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (float))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (float))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (float))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (float))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_float=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (float), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (float), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 echo "$as_me: error: internal error: not reached in cross-compile" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (float)); } unsigned long ulongval () { return (long) (sizeof (float)); } #include <stdio.h> #include <stdlib.h> int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (float))) < 0) { long i = longval (); if (i != ((long) (sizeof (float)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (float)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_float=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (float), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (float), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_float=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_float" >&5 echo "${ECHO_T}$ac_cv_sizeof_float" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_FLOAT $ac_cv_sizeof_float _ACEOF echo "$as_me:$LINENO: checking for double" >&5 echo $ECHO_N "checking for double... $ECHO_C" >&6 if test "${ac_cv_type_double+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((double *) 0) return 0; if (sizeof (double)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_double=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_double=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_double" >&5 echo "${ECHO_T}$ac_cv_type_double" >&6 echo "$as_me:$LINENO: checking size of double" >&5 echo $ECHO_N "checking size of double... $ECHO_C" >&6 if test "${ac_cv_sizeof_double+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_double" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (double))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (double))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (double))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (double))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (double))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_double=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (double), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 echo "$as_me: error: internal error: not reached in cross-compile" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (double)); } unsigned long ulongval () { return (long) (sizeof (double)); } #include <stdio.h> #include <stdlib.h> int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (double))) < 0) { long i = longval (); if (i != ((long) (sizeof (double)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (double)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_double=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (double), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_double=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_double" >&5 echo "${ECHO_T}$ac_cv_sizeof_double" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_DOUBLE $ac_cv_sizeof_double _ACEOF if test "X$libdir" != "X" then if test "X$RPATH" = "X" then case "$host_os" in *linux*|*solaris* ) if test "X$GCC" = Xyes then if test "X$ac_R_nospace" = "Xno" then RPATH="-Wl,-R," else RPATH="-Wl,-R" fi else if test "X$ac_R_nospace" = "Xno" then RPATH="-R " else RPATH="-R" fi fi ;; *osf*) if test "X$GCC" = Xyes then RPATH="-Wl,-rpath," else RPATH="-rpath " fi ;; esac if test "X$RPATH" != "X" then RPATH="$RPATH$libdir" fi else RPATH="$RPATH:$libdir" fi fi ELF_CFLAGS="$ELF_CFLAGS $IEEE_CFLAGS" CFLAGS="$CFLAGS $IEEE_CFLAGS" ac_config_headers="$ac_config_headers src/config.h:src/config.hin" ac_config_files="$ac_config_files Makefile:autoconf/Makefile.in src/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to <bug-autoconf@gnu.org>." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile:autoconf/Makefile.in" ;; "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/config.h:src/config.hin" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@RPATH@,$RPATH,;t t s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@CONFIG_DIR@,$CONFIG_DIR,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t s,@DYNAMIC_LINK_LIB@,$DYNAMIC_LINK_LIB,;t t s,@ELF_CC@,$ELF_CC,;t t s,@ELF_CFLAGS@,$ELF_CFLAGS,;t t s,@ELF_LINK@,$ELF_LINK,;t t s,@ELF_LINK_CMD@,$ELF_LINK_CMD,;t t s,@ELF_DEP_LIBS@,$ELF_DEP_LIBS,;t t s,@DYNAMIC_LINK_FLAGS@,$DYNAMIC_LINK_FLAGS,;t t s,@CC_SHARED@,$CC_SHARED,;t t s,@ELFLIB@,$ELFLIB,;t t s,@ELFLIB_MAJOR@,$ELFLIB_MAJOR,;t t s,@ELFLIB_MAJOR_MINOR@,$ELFLIB_MAJOR_MINOR,;t t s,@X_CFLAGS@,$X_CFLAGS,;t t s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t s,@X_LIBS@,$X_LIBS,;t t s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t s,@SLANG_LIB@,$SLANG_LIB,;t t s,@SLANG_INC@,$SLANG_INC,;t t s,@PVM3_LIB@,$PVM3_LIB,;t t s,@PVM3_INC@,$PVM3_INC,;t t s,@slang_version@,$slang_version,;t t s,@slang_major_version@,$slang_major_version,;t t s,@slang_minor_version@,$slang_minor_version,;t t s,@slang_patchlevel_version@,$slang_patchlevel_version,;t t s,@MODULE_INSTALL_DIR@,$MODULE_INSTALL_DIR,;t t s,@SL_FILES_INSTALL_DIR@,$SL_FILES_INSTALL_DIR,;t t s,@LIBSOCKET@,$LIBSOCKET,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi echo "" echo "You are compiling with the following compiler configuration:" echo " CC =" "$CC" echo " CC_SHARED =" "$CC_SHARED" echo " CFLAGS =" "$CFLAGS" echo " LDFLAGS =" "$LDFLAGS" "$DYNAMIC_LINK_FLAGS" echo "" echo "The modules will be installed in $MODULE_INSTALL_DIR." echo "Any associated .sl files will be install in $SL_FILES_INSTALL_DIR" echo "" echo "If any of these quantities are incorrect, edit src/Makefile accordingly." echo "" ���������������������������������������������������������������������������������������������������������pvm-0.1.5/autoconf/���������������������������������������������������������������������������������0000755�0026061�0026061�00000000000�10330414266�014404� 5����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/autoconf/Makefile.in����������������������������������������������������������������������0000644�0026061�0026061�00000000433�07753241225�016461� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- sh -*- @SET_MAKE@ SHELL = /bin/sh all: cd src; $(MAKE) all clean: cd src; $(MAKE) clean /bin/rm -f *~ \#* distclean: clean cd src; $(MAKE) distclean /bin/rm -f config.log config.cache config.status Makefile test: cd src; $(MAKE) test install: cd src; $(MAKE) install �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/autoconf/aclocal.m4�����������������������������������������������������������������������0000644�0026061�0026061�00000054722�10234025542�016254� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl# -*- mode: sh; mode: fold -*- dnl# Version 0.1.4 AC_DEFUN(JD_INIT, dnl#{{{ [ #These variable are initialized by JD init function CONFIG_DIR=`pwd` cd $srcdir if test "`pwd`" != "$CONFIG_DIR" then AC_MSG_ERROR("This software does not support configuring from another directory. See the INSTALL file") fi dnl# if test "X$PWD" != "X" dnl# then dnl# CONFIG_DIR="$PWD" dnl# fi AC_SUBST(CONFIG_DIR)dnl # Note: these will differ if one is a symbolic link if test -f /usr/bin/dirname; then JD_Above_Dir=`dirname $CONFIG_DIR` else # system is a loser JD_Above_Dir=`cd ..;pwd` fi JD_Above_Dir2=`cd ..;pwd` ]) dnl#}}} dnl# This function expand the "prefix variables. For example, it will expand dnl# values such as ${exec_prefix}/foo when ${exec_prefix} itself has a dnl# of ${prefix}. This function produces the shell variables: dnl# jd_prefix_libdir, jd_prefix_incdir AC_DEFUN(JD_EXPAND_PREFIX, dnl#{{{ [ if test "X$jd_prefix" = "X" then jd_prefix=$ac_default_prefix if test "X$prefix" != "XNONE" then jd_prefix="$prefix" fi jd_exec_prefix="$jd_prefix" if test "X$exec_prefix" != "XNONE" then jd_exec_prefix="$exec_prefix" fi dnl#Unfortunately, exec_prefix may have a value like ${prefix}, etc. dnl#Let the shell expand those. Yuk. eval `sh <<EOF prefix=$jd_prefix exec_prefix=$jd_exec_prefix libdir=$libdir includedir=$includedir echo jd_prefix_libdir="\$libdir" jd_prefix_incdir="\$includedir" EOF ` fi ]) #}}} AC_DEFUN(JD_SET_OBJ_SRC_DIR, dnl#{{{ [ #--------------------------------------------------------------------------- # Set the source directory and object directory. The makefile assumes an # absolute path name. This is because src/Makefile cds to OBJDIR and compiles # the src file which is in SRCDIR #--------------------------------------------------------------------------- SRCDIR=$CONFIG_DIR if test "$1" != "." then if test -z "$1" then SRCDIR=$SRCDIR/src else SRCDIR=$SRCDIR/$1 fi fi OBJDIR=$SRCDIR/"$ARCH"objs ELFDIR=$SRCDIR/elf"$ARCH"objs AC_SUBST(SRCDIR)dnl AC_SUBST(OBJDIR)dnl AC_SUBST(ELFDIR)dnl ]) dnl#}}} RPATH="" AC_DEFUN(JD_INIT_RPATH, dnl#{{{ [ dnl# determine whether or not -R or -rpath can be used case "$host_os" in *linux*|*solaris* ) if test "X$GCC" = Xyes then if test "X$ac_R_nospace" = "Xno" then RPATH="-Wl,-R," else RPATH="-Wl,-R" fi else if test "X$ac_R_nospace" = "Xno" then RPATH="-R " else RPATH="-R" fi fi ;; *osf*) if test "X$GCC" = Xyes then RPATH="-Wl,-rpath," else RPATH="-rpath " fi ;; esac ]) dnl#}}} AC_DEFUN(JD_SET_RPATH, dnl#{{{ [ if test "X$1" != "X" then if test "X$RPATH" = "X" then JD_INIT_RPATH if test "X$RPATH" != "X" then RPATH="$RPATH$1" fi else RPATH="$RPATH:$1" fi fi ]) AC_SUBST(RPATH)dnl dnl#}}} AC_DEFUN(JD_UPPERCASE, dnl#{{{ [ changequote(<<, >>)dnl define(<<$2>>, translit($1, [a-z], [A-Z]))dnl changequote([, ])dnl ]) #}}} AC_DEFUN(JD_SIMPLE_LIB_DIR, dnl#{{{ [ JD_UPPERCASE($1,JD_UP_NAME) JD_UP_NAME[]_LIB_DIR=$JD_Above_Dir/$1/libsrc/"$ARCH"objs JD_UP_NAME[]_INCLUDE=$JD_Above_Dir/$1/libsrc if test ! -d "[$]JD_UP_NAME[]_INCLUDE" then JD_UP_NAME[]_LIB_DIR=$JD_Above_Dir/$1/src/"$ARCH"objs JD_UP_NAME[]_INCLUDE=$JD_Above_Dir/$1/src if test ! -d "[$]JD_UP_NAME[]_INCLUDE" then echo "" echo WARNING------Unable to find the JD_UP_NAME directory echo You may have to edit $CONFIG_DIR/src/Makefile. echo "" fi fi AC_SUBST(JD_UP_NAME[]_LIB_DIR)dnl AC_SUBST(JD_UP_NAME[]_INCLUDE)dnl undefine([JD_UP_NAME])dnl ]) dnl#}}} AC_DEFUN(JD_FIND_GENERIC, dnl#{{{ [ AC_REQUIRE([JD_EXPAND_PREFIX])dnl changequote(<<, >>)dnl define(<<JD_UP_NAME>>, translit($1, [a-z], [A-Z]))dnl changequote([, ])dnl # Look for the JD_UP_NAME package #JD_UP_NAME[]_INCLUDE="" #JD_UP_NAME[]_LIB_DIR="" # This list consists of "include,lib include,lib ..." JD_Search_Dirs="$JD_Above_Dir2/$1/libsrc,$JD_Above_Dir2/$1/libsrc/"$ARCH"objs \ $JD_Above_Dir/$1/libsrc,$JD_Above_Dir/$1/libsrc/"$ARCH"objs \ $JD_Above_Dir2/$1/src,$JD_Above_Dir2/$1/src/"$ARCH"objs \ $JD_Above_Dir/$1/src,$JD_Above_Dir/$1/src/"$ARCH"objs" JD_Search_Dirs="$JD_Search_Dirs \ $jd_prefix_incdir,$jd_prefix_libdir \ $HOME/include,$HOME/lib" if test -n "$ARCH" then JD_Search_Dirs="$JD_Search_Dirs $HOME/include,$HOME/$ARCH/lib" JD_Search_Dirs="$JD_Search_Dirs $HOME/include,$HOME/sys/$ARCH/lib" fi # Now add the standard system includes. The reason for doing this is that # the other directories may have a better chance of containing a more recent # version. JD_Search_Dirs="$JD_Search_Dirs \ /usr/local/include,/usr/local/lib \ /usr/include,/usr/lib \ /usr/include/$1,/usr/lib \ /usr/include/$1,/usr/lib/$1" echo looking for the JD_UP_NAME library for include_and_lib in $JD_Search_Dirs do # Yuk. Is there a better way to set these variables?? generic_include=`echo $include_and_lib | tr ',' ' ' | awk '{print [$]1}'` generic_lib=`echo $include_and_lib | tr ',' ' ' | awk '{print [$]2}'` echo Looking for $1.h in $generic_include echo and lib$1.a in $generic_lib if test -r $generic_include/$1.h && test -r $generic_lib/lib$1.a then echo Found it. JD_UP_NAME[]_LIB_DIR="$generic_lib" JD_UP_NAME[]_INCLUDE="$generic_include" break else if test -r $generic_include/$1.h && test -r $generic_lib/lib$1.so then echo Found it. JD_UP_NAME[]_LIB_DIR="$generic_lib" JD_UP_NAME[]_INCLUDE="$generic_include" break fi fi done if test -n "[$]JD_UP_NAME[]_LIB_DIR" then jd_have_$1="yes" else echo Unable to find the $JD_UP_NAME library. echo You may have to edit $CONFIG_DIR/src/Makefile. JD_UP_NAME[]_INCLUDE=$JD_Above_Dir/$1/src JD_UP_NAME[]_LIB_DIR=$JD_Above_Dir/$1/src/"$ARCH"objs jd_have_$1="no" fi JD_UP_NAME[]_INC="-I[$]JD_UP_NAME[]_INCLUDE" JD_UP_NAME[]_LIB="-L[$]JD_UP_NAME[]_LIB_DIR" JD_SET_RPATH([$]JD_UP_NAME[]_LIB_DIR) dnl if test "X$GCC" = Xyes dnl then dnl RPATH_[]JD_UP_NAME="-Wl,-R[$]JD_UP_NAME[]_LIB_DIR" dnl else dnl RPATH_[]JD_UP_NAME="-R[$]JD_UP_NAME[]_LIB_DIR" dnl fi # gcc under solaris is often not installed correctly. Avoid specifying # -I/usr/include. if test "[$]JD_UP_NAME[]_INC" = "-I/usr/include" then JD_UP_NAME[]_INC="" fi if test "[$]JD_UP_NAME[]_LIB" = "-L/usr/lib" then JD_UP_NAME[]_LIB="" RPATH_[]JD_UP_NAME="" fi AC_SUBST(JD_UP_NAME[]_LIB)dnl AC_SUBST(JD_UP_NAME[]_INC)dnl AC_SUBST(JD_UP_NAME[]_LIB_DIR)dnl AC_SUBST(JD_UP_NAME[]_INCLUDE)dnl dnl AC_SUBST(RPATH_[]JD_UP_NAME)dnl undefine([JD_UP_NAME])dnl ]) dnl#}}} AC_DEFUN(JD_FIND_SLANG, dnl#{{{ [ JD_FIND_GENERIC(slang) ]) dnl#}}} AC_DEFUN(JD_GCC_WARNINGS, dnl#{{{ [ AC_ARG_ENABLE(warnings, [ --enable-warnings turn on GCC compiler warnings], [gcc_warnings=$enableval]) if test -n "$GCC" then #CFLAGS="$CFLAGS -fno-strength-reduce" if test -n "$gcc_warnings" then CFLAGS="$CFLAGS -Wall -W -pedantic -Winline -Wmissing-prototypes \ -Wnested-externs -Wpointer-arith -Wcast-align -Wshadow -Wstrict-prototypes" # Now trim excess whitespace CFLAGS=`echo $CFLAGS` fi fi ]) dnl#}}} IEEE_CFLAGS="" AC_DEFUN(JD_IEEE_CFLAGS, dnl#{{{ [ case "$host_cpu" in *alpha* ) if test "$GCC" = yes then IEEE_CFLAGS="-mieee" else IEEE_CFLAGS="-ieee_with_no_inexact" fi ;; * ) IEEE_CFLAGS="" esac ]) dnl#}}} AC_DEFUN(JD_CREATE_ORULE, dnl#{{{ [ PROGRAM_OBJECT_RULES="$PROGRAM_OBJECT_RULES \$(OBJDIR)/$1.o : \$(SRCDIR)/$1.c \$(DOT_O_DEPS) \$("$1"_O_DEP) cd \$(OBJDIR); \$(COMPILE_CMD) \$("$1"_C_FLAGS) \$(SRCDIR)/$1.c " ]) dnl#}}} AC_DEFUN(JD_CREATE_ELFORULE, dnl#{{{ [ PROGRAM_ELF_ORULES="$PROGRAM_ELF_ORULES \$(ELFDIR)/$1.o : \$(SRCDIR)/$1.c \$(DOT_O_DEPS) \$("$1"_O_DEP) cd \$(ELFDIR); \$(ELFCOMPILE_CMD) \$("$1"_C_FLAGS) \$(SRCDIR)/$1.c " ]) dnl#}}} AC_DEFUN(JD_CREATE_EXEC_RULE, dnl#{{{ [ PROGRAM_OBJECT_RULES="$PROGRAM_OBJECT_RULES $1 : \$(OBJDIR)/$1 @echo $1 created in \$(OBJDIR) \$(OBJDIR)/$1 : \$(OBJDIR)/$1.o \$("$1"_DEPS) \$(EXECDEPS) \$(CC) -o \$(OBJDIR)/$1 \$(LDFLAGS) \$(OBJDIR)/$1.o \$("$1"_LIBS) \$(EXECLIBS) \$(OBJDIR)/$1.o : \$(SRCDIR)/$1.c \$(DOT_O_DEPS) \$("$1"_O_DEP) cd \$(OBJDIR); \$(COMPILE_CMD) \$("$1"_INC) \$(EXECINC) \$(SRCDIR)/$1.c " ]) dnl#}}} AC_DEFUN(JD_CREATE_MODULE_ORULES, dnl#{{{ [ for program_module in $Program_Modules; do JD_CREATE_ORULE($program_module) JD_CREATE_ELFORULE($program_module) done ]) dnl#}}} AC_DEFUN(JD_GET_MODULES, dnl#{{{ [ PROGRAM_HFILES="" PROGRAM_OFILES="" PROGRAM_CFILES="" PROGRAM_OBJECTS="" PROGRAM_ELFOBJECTS="" PROGRAM_OBJECT_RULES="" PROGRAM_ELF_ORULES="" if test -z "$1" then Program_Modules="" else comment_re="^#" Program_Modules=`grep -v '$comment_re' $1 | awk '{print [$]1}'` Program_H_Modules=`grep -v '$comment_re' $1 | awk '{print [$]2}'` for program_module in $Program_H_Modules; do PROGRAM_HFILES="$PROGRAM_HFILES $program_module" done fi for program_module in $Program_Modules; do PROGRAM_OFILES="$PROGRAM_OFILES $program_module.o" PROGRAM_CFILES="$PROGRAM_CFILES $program_module.c" PROGRAM_OBJECTS="$PROGRAM_OBJECTS \$(OBJDIR)/$program_module.o" PROGRAM_ELFOBJECTS="$PROGRAM_ELFOBJECTS \$(ELFDIR)/$program_module.o" done dnl echo $PROGRAM_OFILES dnl echo $PROGRAM_HFILES AC_SUBST(PROGRAM_OFILES)dnl AC_SUBST(PROGRAM_CFILES)dnl AC_SUBST(PROGRAM_HFILES)dnl AC_SUBST(PROGRAM_OBJECTS)dnl AC_SUBST(PROGRAM_ELFOBJECTS)dnl ]) dnl#}}} AC_DEFUN(JD_APPEND_RULES, dnl#{{{ [ echo "$PROGRAM_OBJECT_RULES" >> $1 ]) dnl#}}} AC_DEFUN(JD_APPEND_ELFRULES, dnl#{{{ [ echo "$PROGRAM_ELF_ORULES" >> $1 ]) dnl#}}} AC_DEFUN(JD_CREATE_MODULE_EXEC_RULES, dnl#{{{ [ for program_module in $Program_Modules; do JD_CREATE_EXEC_RULE($program_module) done ]) dnl#}}} AC_DEFUN(JD_TERMCAP, dnl#{{{ [ AC_MSG_CHECKING(for Terminfo) MISC_TERMINFO_DIRS="$FINKPREFIX/share/terminfo" if test ! -d $MISC_TERMINFO_DIRS then MISC_TERMINFO_DIRS="" fi JD_Terminfo_Dirs="/usr/lib/terminfo \ /usr/share/terminfo \ /usr/share/lib/terminfo \ /usr/local/lib/terminfo \ $MISC_TERMINFO_DIRS" TERMCAP=-ltermcap for terminfo_dir in $JD_Terminfo_Dirs do if test -d $terminfo_dir then AC_MSG_RESULT(yes) TERMCAP="" break fi done if test "$TERMCAP"; then AC_MSG_RESULT(no) AC_DEFINE(USE_TERMCAP) fi AC_SUBST(TERMCAP)dnl AC_SUBST(MISC_TERMINFO_DIRS)dnl ]) dnl#}}} AC_DEFUN(JD_ANSI_CC, dnl#{{{ [ AC_PROG_CC AC_PROG_CPP AC_PROG_GCC_TRADITIONAL AC_ISC_POSIX AC_AIX dnl #This stuff came from Yorick config script dnl dnl # HPUX needs special stuff dnl AC_EGREP_CPP(yes, [#ifdef hpux yes #endif ], [ AC_DEFINE(_HPUX_SOURCE) if test "$CC" = cc; then CC="cc -Ae"; fi ])dnl dnl dnl #Be sure we've found compiler that understands prototypes dnl AC_MSG_CHECKING(C compiler that understands ANSI prototypes) AC_TRY_COMPILE([ ],[ extern int silly (int);], [ AC_MSG_RESULT($CC looks ok. Good.)], [ AC_MSG_RESULT($CC is not a good enough compiler) AC_MSG_ERROR(Set env variable CC to your ANSI compiler and rerun configure.) ])dnl ])dnl dnl#}}} AC_DEFUN(JD_ELF_COMPILER, dnl#{{{ [ dnl #------------------------------------------------------------------------- dnl # Check for dynamic linker dnl #------------------------------------------------------------------------- DYNAMIC_LINK_LIB="" AC_CHECK_HEADER(dlfcn.h,[ AC_DEFINE(HAVE_DLFCN_H) AC_CHECK_LIB(dl,dlopen,[ DYNAMIC_LINK_LIB="-ldl" AC_DEFINE(HAVE_DLOPEN) ],[ AC_CHECK_FUNC(dlopen,AC_DEFINE(HAVE_DLOPEN)) if test "$ac_cv_func_dlopen" != yes then AC_MSG_WARN(cannot perform dynamic linking) fi ])]) AC_SUBST(DYNAMIC_LINK_LIB) ELFLIB="lib\$(THIS_LIB).so" ELFLIB_MAJOR="\$(ELFLIB).\$(ELF_MAJOR_VERSION)" ELFLIB_MAJOR_MINOR="\$(ELFLIB).\$(ELF_MAJOR_VERSION).\$(ELF_MINOR_VERSION)" if test "$GCC" = yes then if test X"$CFLAGS" = X then CFLAGS="-O2" fi fi case "$host_os" in *linux* ) DYNAMIC_LINK_FLAGS="-Wl,-export-dynamic" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fPIC" ELF_LINK="\$(CC) \$(LDFLAGS) -shared -Wl,-soname#" ELF_LINK_CMD="\$(ELF_LINK),\$(ELFLIB_MAJOR)" ELF_DEP_LIBS="\$(DL_LIB) -lm -lc" CC_SHARED="\$(CC) \$(CFLAGS) -shared -fPIC" ;; *solaris* ) if test "$GCC" = yes then DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fPIC" ELF_LINK="\$(CC) \$(LDFLAGS) -shared -Wl,-ztext -Wl,-h#" ELF_LINK_CMD="\$(ELF_LINK),\$(ELFLIB_MAJOR)" ELF_DEP_LIBS="\$(DL_LIB) -lm -lc" CC_SHARED="\$(CC) \$(CFLAGS) -G -fPIC" else DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -K PIC" ELF_LINK="\$(CC) \$(LDFLAGS) -G -h#" ELF_LINK_CMD="\$(ELF_LINK)\$(ELFLIB_MAJOR)" ELF_DEP_LIBS="\$(DL_LIB) -lm -lc" CC_SHARED="\$(CC) \$(CFLAGS) -G -K PIC" fi ;; # osr5 or unixware7 with current or late autoconf *sco3.2v5* | *unixware-5* | *sco-sysv5uw7*) if test "$GCC" = yes then DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fPIC" ELF_LINK="\$(CC) \$(LDFLAGS) -shared -Wl,-h#" ELF_LINK_CMD="\$(ELF_LINK),\$(ELFLIB_MAJOR)" ELF_DEP_LIBS= CC_SHARED="\$(CC) \$(CFLAGS) -G -fPIC" else DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -K pic" # ELF_LINK="ld -G -z text -h#" ELF_LINK="\$(CC) \$(LDFLAGS) -G -z text -h#" ELF_LINK_CMD="\$(ELF_LINK)\$(ELFLIB_MAJOR)" ELF_DEP_LIBS= CC_SHARED="\$(CC) \$(CFLAGS) -G -K pic" fi ;; *irix6.5* ) echo "Note: ELF compiler for host_os=$host_os may not be correct" echo "double-check: 'mode_t', 'pid_t' may be wrong!" if test "$GCC" = yes then # not tested DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fPIC" ELF_LINK="\$(CC) \$(LDFLAGS) -shared -Wl,-h#" ELF_LINK_CMD="\$(ELF_LINK),\$(ELFLIB_MAJOR)" ELF_DEP_LIBS= CC_SHARED="\$(CC) \$(CFLAGS) -shared -fPIC" else DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -K pic" # default anyhow ELF_LINK="\$(CC) \$(LDFLAGS) -shared -o #" ELF_LINK_CMD="\$(ELF_LINK)\$(ELFLIB_MAJOR)" ELF_DEP_LIBS= CC_SHARED="\$(CC) \$(CFLAGS) -shared -K pic" fi ;; *darwin* ) DYNAMIC_LINK_FLAGS="" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fno-common" ELF_LINK="\$(CC) \$(LDFLAGS) -dynamiclib" ELF_LINK_CMD="\$(ELF_LINK) -install_name \$(install_lib_dir)/\$(ELFLIB_MAJOR) -compatibility_version \$(ELF_MAJOR_VERSION) -current_version \$(ELF_MAJOR_VERSION).\$(ELF_MINOR_VERSION)" ELF_DEP_LIBS="\$(LDFLAGS) \$(DL_LIB)" CC_SHARED="\$(CC) -bundle -flat_namespace -undefined suppress \$(CFLAGS) -fno-common" ELFLIB="lib\$(THIS_LIB).dylib" ELFLIB_MAJOR="lib\$(THIS_LIB).\$(ELF_MAJOR_VERSION).dylib" ELFLIB_MAJOR_MINOR="lib\$(THIS_LIB).\$(ELF_MAJOR_VERSION).\$(ELF_MINOR_VERSION).dylib" ;; *freebsd* ) ELFLIB_MAJOR_MINOR="\$(ELFLIB).\$(ELF_MAJOR_VERSION)" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fPIC" if test "X$PORTOBJFORMAT" = "Xelf" ; then ELF_LINK="\$(CC) \$(LDFLAGS) -shared -Wl,-soname,\$(ELFLIB_MAJOR)" else ELF_LINK="ld -Bshareable -x" fi ELF_LINK_CMD="\$(ELF_LINK)" ELF_DEP_LIBS="\$(DL_LIB) -lm" CC_SHARED="\$(CC) \$(CFLAGS) -shared -fPIC" ;; * ) echo "Note: ELF compiler for host_os=$host_os may be wrong" ELF_CC="\$(CC)" ELF_CFLAGS="\$(CFLAGS) -fPIC" ELF_LINK="\$(CC) \$(LDFLAGS) -shared" ELF_LINK_CMD="\$(ELF_LINK)" ELF_DEP_LIBS="\$(DL_LIB) -lm -lc" CC_SHARED="\$(CC) \$(CFLAGS) -shared -fPIC" esac AC_SUBST(ELF_CC) AC_SUBST(ELF_CFLAGS) AC_SUBST(ELF_LINK) AC_SUBST(ELF_LINK_CMD) AC_SUBST(ELF_DEP_LIBS) AC_SUBST(DYNAMIC_LINK_FLAGS) AC_SUBST(CC_SHARED) AC_SUBST(ELFLIB) AC_SUBST(ELFLIB_MAJOR) AC_SUBST(ELFLIB_MAJOR_MINOR) ]) dnl#}}} AC_DEFUN(JD_F77_COMPILER, dnl#{{{ [ case "$host_os" in *linux* ) F77="g77" F77_LIBS="-lg2c" ;; *solaris*) F77=f77 #F77_LIBS="-lF77 -lM77 -L/opt/SUNWspro/SC4.0/lib -lsunmath" F77_LIBS="-lF77 -lM77 -lsunmath" ;; *) echo "" echo "WARNING: Assuming f77 as your FORTRAN compiler" echo "" F77=f77 F77_LIBS="" esac AC_SUBST(F77) AC_SUBST(F77_LIBS) ]) dnl#}}} dnl# This macro process the --with-xxx, --with-xxxinc, and --with-xxxlib dnl# command line arguments and returns the values as shell variables dnl# jd_xxx_include_dir and jd_xxx_library_dir. It does not perform any dnl# substitutions, nor check for the existence of the supplied values. AC_DEFUN(JD_WITH_LIBRARY_PATHS, dnl#{{{ [ JD_UPPERCASE($1,JD_ARG1) jd_$1_include_dir="" jd_$1_library_dir="" jd_with_$1_library="" AC_ARG_WITH($1, [ --with-$1=DIR Use DIR/lib and DIR/include for $1], [jd_with_$1_arg=$withval], [jd_with_$1_arg=unspecified]) case "x$jd_with_$1_arg" in xno) jd_with_$1_library="no" ;; x) AC_MSG_ERROR(--with-$1 requires a value-- try yes or no) ;; xunspecified) ;; xyes) ;; *) jd_$1_include_dir="$jd_with_$1_arg"/include jd_$1_library_dir="$jd_with_$1_arg"/lib ;; esac AC_ARG_WITH($1lib, [ --with-$1lib=DIR $1 library in DIR], [jd_with_$1lib_arg=$withval], [jd_with_$1lib_arg=unspecified]) case "x$jd_with_$1lib_arg" in xunspecified) ;; xno) ;; x) AC_MSG_ERROR(--with-$1lib requres a value) ;; *) jd_$1_library_dir="$jd_with_$1lib_arg" ;; esac AC_ARG_WITH($1inc, [ --with-$1inc=DIR $1 include files in DIR], [jd_with_$1inc_arg=$withval], [jd_with_$1inc_arg=unspecified]) case "x$jd_with_$1inc_arg" in x) AC_MSG_ERROR(--with-$1inc requres a value) ;; xunspecified) ;; xno) ;; *) jd_$1_include_dir="$jd_with_$1inc_arg" ;; esac ]) dnl#}}} dnl# This function checks for the existence of the specified library $1 with dnl# header file $2. If the library exists, then the shell variables will dnl# be created: dnl# jd_with_$1_library=yes/no, dnl# jd_$1_inc_file dnl# jd_$1_include_dir dnl# jd_$1_library_dir AC_DEFUN(JD_CHECK_FOR_LIBRARY, dnl#{{{ [ AC_REQUIRE([JD_EXPAND_PREFIX])dnl AC_MSG_CHECKING(for the $1 library and header files $2) dnl JD_UPPERCASE($1,JD_ARG1) JD_WITH_LIBRARY_PATHS($1) if test X"$jd_with_$1_library" = X then jd_$1_inc_file=$2 jd_with_$1_library="yes" if test "X$jd_$1_inc_file" = "X" then jd_$1_inc_file=$1.h fi if test X"$jd_$1_include_dir" = X then lib_include_dirs="\ $jd_prefix_incdir \ /usr/local/$1/include \ /usr/local/include/$1 \ /usr/local/include \ /usr/include/$1 \ /usr/$1/include \ /usr/include \ /opt/include/$1 \ /opt/$1/include \ /opt/include" for X in $lib_include_dirs do if test -r "$X/$jd_$1_inc_file" then jd_$1_include_dir="$X" break fi done if test X"$jd_$1_include_dir" = X then jd_with_$1_library="no" fi fi if test X"$jd_$1_library_dir" = X then lib_library_dirs="\ $jd_prefix_libdir \ /usr/local/lib \ /usr/local/lib/$1 \ /usr/local/$1/lib \ /usr/lib \ /usr/lib/$1 \ /usr/$1/lib \ /opt/lib \ /opt/lib/$1 \ /opt/$1/lib" for X in $lib_library_dirs do if test -r "$X/lib$1.so" -o -r "$X/lib$1.a" then jd_$1_library_dir="$X" break fi done if test X"$jd_$1_library_dir" = X then jd_with_$1_library="no" fi fi fi if test "$jd_with_$1_library" = "yes" then AC_MSG_RESULT(yes: $jd_$1_library_dir and $jd_$1_include_dir) dnl# Avoid using /usr/lib and /usr/include because of problems with dnl# gcc on some solaris systems. JD_ARG1[]_LIB=-L$jd_$1_library_dir if test "X$jd_$1_library_dir" = "X/usr/lib" then JD_ARG1[]_LIB="" else JD_SET_RPATH($jd_$1_library_dir) fi JD_ARG1[]_INC=-I$jd_$1_include_dir if test "X$jd_$1_include_dir" = "X/usr/include" then JD_ARG1[]_INC="" fi else AC_MSG_RESULT(no) JD_ARG1[]_INC="" JD_ARG1[]_LIB="" fi AC_SUBST(JD_ARG1[]_LIB) AC_SUBST(JD_ARG1[]_INC) ]) dnl#}}} AC_DEFUN(JD_WITH_LIBRARY, dnl#{{{ [ JD_CHECK_FOR_LIBRARY($1, $2) if test "$jd_with_$1_library" = "no" then AC_MSG_ERROR(unable to find the $1 library and header file $jd_$1_inc_file) fi ]) dnl#}}} AC_DEFUN(JD_SLANG_VERSION, dnl#{{{ [ slang_h=$jd_slang_include_dir/slang.h AC_MSG_CHECKING(SLANG_VERSION in $slang_h) slang_version=`grep "^#define *SLANG_VERSION " $slang_h | awk '{ print [$]3 }'` slang_major_version=`echo $slang_version | awk '{ print int([$]1/10000) }'` slang_minor_version=`echo $slang_version $slang_major_version | awk '{ print int(([$]1 - [$]2*10000)/100) }'` slang_patchlevel_version=`echo $slang_version $slang_major_version $slang_minor_version | awk '{ print ([$]1 - [$]2*10000 - [$]3*100) }'` AC_MSG_RESULT($slang_major_version.$slang_minor_version.$slang_patchlevel_version) AC_SUBST(slang_version) AC_SUBST(slang_major_version) AC_SUBST(slang_minor_version) AC_SUBST(slang_patchlevel_version) ]) #}}} AC_DEFUN(JD_SLANG_MODULE_INSTALL_DIR, dnl#{{{ [ AC_REQUIRE([JD_SLANG_VERSION]) if test "X$slang_major_version" = "X1" then MODULE_INSTALL_DIR="$libdir/slang/modules" else MODULE_INSTALL_DIR="$libdir/slang/v$slang_major_version/modules" fi SL_FILES_INSTALL_DIR=$datadir/slsh/local-packages AC_SUBST(MODULE_INSTALL_DIR) AC_SUBST(SL_FILES_INSTALL_DIR) ]) #}}} AC_DEFUN(JD_CHECK_LONG_LONG, dnl#{{{ [ AC_CHECK_TYPES(long long) AC_CHECK_SIZEOF(long long) ]) dnl#}}} AC_DEFUN(JD_LARGE_FILE_SUPPORTXXX, dnl#{{{ [ AC_REQUIRE([JD_CHECK_LONG_LONG]) AC_MSG_CHECKING(whether to explicitly activate long file support) AC_DEFINE(_LARGEFILE_SOURCE, 1) AC_DEFINE(_FILE_OFFSET_BITS, 64) jd_large_file_support=no if test X$ac_cv_type_long_long = Xyes then if test $ac_cv_sizeof_long_long -ge 8 then jd_large_file_support=yes fi fi if test $jd_large_file_support = yes then AC_DEFINE(HAVE_LARGEFILE_SUPPORT, 1) AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi ]) dnl#}}} AC_DEFUN(JD_LARGE_FILE_SUPPORT, dnl#{{{ [ AC_SYS_LARGEFILE AC_FUNC_FSEEKO AC_TYPE_OFF_T AC_CHECK_SIZEOF(off_t) ]) #}}} AC_DEFUN(JD_HAVE_ISINF, dnl#{{{ [ AC_MSG_CHECKING([for isinf]) AC_LINK_IFELSE([AC_LANG_PROGRAM( [[#include <math.h>]], [[isinf (0.0);]])], [AC_MSG_RESULT([yes]) AC_DEFINE(HAVE_ISINF, 1)]) ]) #}}} ����������������������������������������������pvm-0.1.5/autoconf/config.guess���������������������������������������������������������������������0000755�0026061�0026061�00000113106�07753241225�016736� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002 Free Software Foundation, Inc. timestamp='2002-03-20' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner <per@bothner.com>. # Please send patches to <config-patches@gnu.org>. Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi dummy=dummy-$$ trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int dummy(){}" > $dummy.c ; for c in cc gcc c89 c99 ; do ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; if test $? = 0 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; rm -f $dummy.c $dummy.o $dummy.rel ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. cat <<EOF >$dummy.s .data \$Lformat: .byte 37,100,45,37,120,10,0 # "%d-%x\n" .text .globl main .align 4 .ent main main: .frame \$30,16,\$26,0 ldgp \$29,0(\$27) .prologue 1 .long 0x47e03d80 # implver \$0 lda \$2,-1 .long 0x47e20c21 # amask \$2,\$1 lda \$16,\$Lformat mov \$0,\$17 not \$1,\$18 jsr \$26,printf ldgp \$29,0(\$26) mov 0,\$16 jsr \$26,exit .end main EOF eval $set_cc_for_build $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then case `./$dummy` in 0-0) UNAME_MACHINE="alpha" ;; 1-0) UNAME_MACHINE="alphaev5" ;; 1-1) UNAME_MACHINE="alphaev56" ;; 1-101) UNAME_MACHINE="alphapca56" ;; 2-303) UNAME_MACHINE="alphaev6" ;; 2-307) UNAME_MACHINE="alphaev67" ;; 2-1307) UNAME_MACHINE="alphaev68" ;; esac fi rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <sys/systemcfg.h> main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include <stdlib.h> #include <unistd.h> int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy` if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi rm -f $dummy.c $dummy fi ;; esac echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <unistd.h> int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3D:*:*:*) echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:3*) echo i386-pc-interix3 exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i386-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` rm -f $dummy.c test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <features.h> #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` rm -f $dummy.c test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` echo ${UNAME_MACHINE}-pc-isc$UNAME_REL elif /bin/uname -X 2>/dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says <Richard.M.Bartel@ccMail.Census.GOV> echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes <hewes@openmarket.com>. # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) echo `uname -p`-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c <<EOF #ifdef _SEQUENT_ # include <sys/types.h> # include <sys/utsname.h> #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include <sys/param.h> printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include <sys/param.h> # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 <<EOF $0: unable to guess system type This script, last modified $timestamp, has failed to recognize the operating system you are using. It is advised that you download the most up to date version of the config scripts from ftp://ftp.gnu.org/pub/gnu/config/ If the version you run ($0) is already up to date, please send the following data and any information you think might be pertinent to <config-patches@gnu.org> in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/autoconf/config.sub�����������������������������������������������������������������������0000755�0026061�0026061�00000075010�10234025542�016370� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. timestamp='2004-06-24' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to <config-patches@gnu.org>. Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32r | m32rle | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | msp430-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/autoconf/configure.ac���������������������������������������������������������������������0000644�0026061�0026061�00000002612�10330413427�016671� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl -*- sh -*- AC_INIT(src/pvm-module.c) AC_PREFIX_DEFAULT(/usr/local) AC_CONFIG_AUX_DIR(autoconf) AC_CANONICAL_HOST AC_PROG_RANLIB AC_PROG_INSTALL AC_PROG_MAKE_SET JD_INIT JD_ANSI_CC JD_ELF_COMPILER JD_IEEE_CFLAGS AC_PATH_XTRA JD_WITH_LIBRARY(slang) dnl# Add libraries here JD_WITH_LIBRARY(pvm3) dnl# This macro inits the module installation dir JD_SLANG_MODULE_INSTALL_DIR dnl Check these header since they cause trouble AC_CHECK_HEADERS( \ stdlib.h \ unistd.h \ ) AC_CHECK_LIB(socket, socket, [LIBSOCKET="-lnsl -lsocket"]) dnl for Solaris #AC_CHECK_LIB(bsd, gethostbyname, [LIBSOCKET="-lbsd"]) dnl for LynxOS AC_SUBST(LIBSOCKET) AC_CHECK_SIZEOF(short, 2) AC_CHECK_SIZEOF(int, 4) AC_CHECK_SIZEOF(long, 4) AC_CHECK_SIZEOF(float, 4) AC_CHECK_SIZEOF(double, 8) JD_SET_RPATH($libdir) ELF_CFLAGS="$ELF_CFLAGS $IEEE_CFLAGS" CFLAGS="$CFLAGS $IEEE_CFLAGS" AC_CONFIG_HEADER(src/config.h:src/config.hin) AC_OUTPUT(Makefile:autoconf/Makefile.in src/Makefile) echo "" echo "You are compiling with the following compiler configuration:" echo " CC =" "$CC" echo " CC_SHARED =" "$CC_SHARED" echo " CFLAGS =" "$CFLAGS" echo " LDFLAGS =" "$LDFLAGS" "$DYNAMIC_LINK_FLAGS" echo "" echo "The modules will be installed in $MODULE_INSTALL_DIR." echo "Any associated .sl files will be install in $SL_FILES_INSTALL_DIR" echo "" echo "If any of these quantities are incorrect, edit src/Makefile accordingly." echo "" ����������������������������������������������������������������������������������������������������������������������pvm-0.1.5/autoconf/install-sh�����������������������������������������������������������������������0000755�0026061�0026061�00000012736�07753241225�016431� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 ����������������������������������pvm-0.1.5/autoconf/mkinsdir.sh����������������������������������������������������������������������0000755�0026061�0026061�00000001136�07753241225�016574� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman <friedman@prep.ai.mit.edu> # Created: 1993-05-16 # Public domain errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d in ${1+"$@"} ; do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" 1>&2 mkdir "$pathcomp" || errstatus=$? fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/examples/���������������������������������������������������������������������������������0000755�0026061�0026061�00000000000�10330414266�014404� 5����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/examples/README���������������������������������������������������������������������������0000644�0026061�0026061�00000000455�07753243227�015304� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������hello_master: An slsh script that sends a message to another task running on the PVM. hello_slave: Used by "hello_master". master: An slsh script that runs a specified command multiple times on the PVM. It uses the "slave" script do do this. slave: Used by "master". �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/examples/hello_master���������������������������������������������������������������������0000755�0026061�0026061�00000001000�07753241224�017006� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env slsh require ("pvm"); define main() { variable tid = pvm_mytid(); variable path, slave_tid; path = path_concat (getcwd(), "hello_slave"); slave_tid = pvm_spawn (path, PvmTaskHost, "pirx", 1); if (slave_tid == PvmNoFile) { pvm_exit(); exit (0); } variable bufid, msgid; bufid = pvm_recv (-1, -1); (,msgid,) = pvm_bufinfo (bufid); variable obj = pvm_recv_obj(); vmessage ("%s says %s", obj.from, obj.msg); pvm_exit(); exit(0); } main(); pvm-0.1.5/examples/hello_slave����������������������������������������������������������������������0000755�0026061�0026061�00000000404�07753241224�016634� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env slsh require ("pvm"); define main() { variable ptid = pvm_parent(); variable s = struct {msg, from}; s.msg = "Hello World"; s.from = getenv ("HOST"); pvm_send_obj (ptid, 1, s); pvm_exit(); exit(0); } main(); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/examples/master���������������������������������������������������������������������������0000755�0026061�0026061�00000002104�07753241224�015631� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env slsh require ("pvm_ms"); variable Slave_Pgm= path_concat (getcwd(), "slave"); if (__argc != 3) { () = fprintf (stderr, "%s <remote-cmd> <N>\n", __argv[0]); exit (1); } static variable Cmd = __argv[1]; static variable N = integer (__argv[2]); static define slave_spawned_callback (tid, host, argv) { vmessage ("Slave running %s spawned on %s with task-id %d\n", argv[0], host, tid); } pvm_ms_set_slave_spawned_callback (&slave_spawned_callback); static define main () { variable pgm_argvs = Array_Type[N]; variable pgm_argv = [Slave_Pgm, Cmd]; pgm_argvs[*] = pgm_argv; % Make sure these variables are set up on the remote end %pvm_export ("SLSH_CONF_DIR"); %pvm_export ("SLSH_PATH"); pvm_ms_set_debug (0); %pvm_ms_set_hosts ("vex", "verus", "aluche"); pvm_ms_set_num_processes_per_host (2); variable exit_status = pvm_ms_run_master (pgm_argvs); foreach (exit_status) { variable s = (); () = fprintf (stdout, "%s [exit %d]==>\n%s\n\n", Cmd, s.exit_status, s.stdout); } exit (0); } main (); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/examples/slave����������������������������������������������������������������������������0000755�0026061�0026061�00000000246�07753241224�015455� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env slsh require ("pvm_ms"); if (__argc == 1) { () = fprintf (stderr, "%s pgm [args]\n", __argv[0]); exit (1); } pvm_ms_run_slave (__argv[[1:]]); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/src/��������������������������������������������������������������������������������������0000755�0026061�0026061�00000000000�10330414266�013355� 5����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/src/Makefile.in���������������������������������������������������������������������������0000644�0026061�0026061�00000007751�10330413725�015433� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- sh -*- #--------------------------------------------------------------------------- # List of modules and associated .sl files to install #--------------------------------------------------------------------------- MODULES = pvm-module.so SL_FILES = pvm.sl pvm_ms.sl xpvm.sl HLP_FILES = ../doc/help/pvm.hlp #--------------------------------------------------------------------------- # Installation Directories #--------------------------------------------------------------------------- prefix = @prefix@ exec_prefix = @exec_prefix@ MODULE_INSTALL_DIR = @MODULE_INSTALL_DIR@ SL_FILES_INSTALL_DIR = @SL_FILES_INSTALL_DIR@ HELP_FILES_INSTALL_DIR = $(SL_FILES_INSTALL_DIR)/help #--------------------------------------------------------------------------- # C Compiler to create a shared library #--------------------------------------------------------------------------- CC_SHARED = @CC_SHARED@ #--------------------------------------------------------------------------- # Location of the S-Lang library and its include file #--------------------------------------------------------------------------- SLANG_INC = @SLANG_INC@ SLANG_LIB = @SLANG_LIB@ -lslang #--------------------------------------------------------------------------- # Additional Libraries required by the module #--------------------------------------------------------------------------- PVM_INC = @PVM3_INC@ PVM_LIB = @PVM3_LIB@ -lpvm3 -lgpvm3 LIBSOCKET = @LIBSOCKET@ MODULE_LIBS = $(PVM_LIB) $(LIBSOCKET) RPATH = @RPATH@ #--------------------------------------------------------------------------- # Misc Programs required for installation #--------------------------------------------------------------------------- INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSDIR = ../autoconf/mkinsdir.sh #--------------------------------------------------------------------------- # DESTDIR is designed to facilitate making packages. Normally it is empty #--------------------------------------------------------------------------- DESTDIR = DEST_MODULE_INSTALL_DIR = $(DESTDIR)$(MODULE_INSTALL_DIR) DEST_SL_FILES_INSTALL_DIR = $(DESTDIR)$(SL_FILES_INSTALL_DIR) DEST_HELP_FILES_INSTALL_DIR = $(DESTDIR)$(HELP_FILES_INSTALL_DIR) #--------------------------------------------------------------------------- LIBS = $(SLANG_LIB) $(MODULE_LIBS) $(RPATH) $(DL_LIB) -lm INCS = $(PVM_INC) $(SLANG_INC) all: $(MODULES) #--------------------------------------------------------------------------- # Put Rules to create the modules here #--------------------------------------------------------------------------- pvm-module.so: pvm-module.c $(CC_SHARED) $(INCS) pvm-module.c -o pvm-module.so $(LIBS) #--------------------------------------------------------------------------- # Regression tests #--------------------------------------------------------------------------- test: @for X in tests/test_*.sl; \ do \ slsh $$X; \ done #--------------------------------------------------------------------------- # Installation Rules #--------------------------------------------------------------------------- install_directories: $(MKINSDIR) $(DEST_MODULE_INSTALL_DIR) $(MKINSDIR) $(DEST_SL_FILES_INSTALL_DIR) $(MKINSDIR) $(DEST_HELP_FILES_INSTALL_DIR) install_modules: @for X in $(MODULES); \ do \ echo $(INSTALL_DATA) $$X $(DEST_MODULE_INSTALL_DIR); \ $(INSTALL_DATA) $$X $(DEST_MODULE_INSTALL_DIR); \ if [ "$$?" != "0" ]; then \ exit 1; \ fi; \ done install_slfiles: @for X in $(SL_FILES); \ do \ echo $(INSTALL_DATA) $$X $(DEST_SL_FILES_INSTALL_DIR); \ $(INSTALL_DATA) $$X $(DEST_SL_FILES_INSTALL_DIR); \ if [ "$$?" != "0" ]; then \ exit 1; \ fi; \ done install_hlpfiles: @for X in $(HLP_FILES); \ do \ echo $(INSTALL_DATA) $$X $(DEST_HELP_FILES_INSTALL_DIR); \ $(INSTALL_DATA) $$X $(DEST_HELP_FILES_INSTALL_DIR); \ if [ "$$?" != "0" ]; then \ exit 1; \ fi; \ done install: all install_directories install_modules install_slfiles install_hlpfiles clean: -/bin/rm -f $(MODULES) *~ \#* distclean: clean -/bin/rm -f config.h Makefile �����������������������pvm-0.1.5/src/config.hin����������������������������������������������������������������������������0000644�0026061�0026061�00000000424�07753241225�015332� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- c -*- */ /* Define this if have stdlib.h */ #undef HAVE_STDLIB_H /* Define this if you have unistd.h */ #undef HAVE_UNISTD_H /* Set these to the appropriate values */ #undef SIZEOF_SHORT #undef SIZEOF_INT #undef SIZEOF_LONG #undef SIZEOF_FLOAT #undef SIZEOF_DOUBLE ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/src/pvm-module.c��������������������������������������������������������������������������0000644�0026061�0026061�00000077635�10234030220�015613� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C; mode: fold; -*- */ /* Copyright (c) 2003 Massachusetts Institute of Technology This software was developed by the MIT Center for Space Research under contract SV1-61010 from the Smithsonian Institution. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in the supporting documentation, and that the name of the Massachusetts Institute of Technology not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. The Massachusetts Institute of Technology makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. THE MASSACHUSETTS INSTITUTE OF TECHNOLOGY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE MASSACHUSETTS INSTITUTE OF TECHNOLOGY BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* Author: John E. Davis (davis@space.mit.edu) */ #include "config.h" #include <stdio.h> #include <signal.h> #include <string.h> #include <stdlib.h> #ifdef HAVE_UNISTD_H # include <unistd.h> #endif #include <slang.h> #include <pvm3.h> #ifdef __cplusplus extern "C" { #endif SLANG_MODULE(pvm); #ifdef __cplusplus } #endif #include "version.h" static int throw_pvm_exception (int err) { if (err < 0) SLang_verror (SL_INTRINSIC_ERROR, "pvm_error: %d", err); return err; } static int pop_2_ints (int *a, int *b) { if ((-1 == SLang_pop_integer (b)) || (-1 == SLang_pop_integer (a))) return -1; return 0; } static SLang_Array_Type *create_int_array (int n) { return SLang_create_array (SLANG_INT_TYPE, 0, NULL, &n, 1); } static SLang_Array_Type *create_string_array (int n) { return SLang_create_array (SLANG_STRING_TYPE, 0, NULL, &n, 1); } static void datatype_intrinsic (int *class_id) { SLtype id = (SLtype) *class_id; if (0 == SLclass_is_class_defined (id)) { SLang_verror (SL_INVALID_PARM, "Invalid data type id (%d)", id); return; } (void) SLclass_push_int_obj (SLANG_DATATYPE_TYPE, id); } #if 0 static int map_pvm_to_slang (int slang_data_type) { switch (slang_data_type) { case SLANG_STRING_TYPE: return PVM_STR; case SLANG_UCHAR_TYPE: case SLANG_CHAR_TYPE: return PVM_BYTE; case SLANG_SHORT_TYPE: return PVM_SHORT; case SLANG_INT_TYPE: return PVM_INT; case SLANG_FLOAT_TYPE: return PVM_FLOAT; case SLANG_DOUBLE_TYPE: return PVM_DOUBLE; case SLANG_COMPLEX_TYPE: return PVM_DCPLX; case SLANG_LONG_TYPE: return PVM_LONG; case SLANG_USHORT_TYPE: return PVM_USHORT; case SLANG_UINT_TYPE: return PVM_UINT; case SLANG_ULONG_TYPE: return PVM_ULONG; } SLang_verror (SL_NOT_IMPLEMENTED, "Unsupported type %s", SLclass_get_datatype_name (slang_data_type)); return -1; } #endif /* Define intrinsics here */ static void _pvm_spawn (int *flag, char *where, int *ntasks) { SLang_Array_Type *at_argv; SLang_Array_Type *at_tids; char **argv; char *task; unsigned int argc; unsigned int i; char **argv_data; int *tids; if (*ntasks < 1) { SLang_verror (SL_INVALID_PARM, "pvm_spawn: ntasks must be > 0"); return; } if (-1 == SLang_pop_array_of_type (&at_argv, SLANG_STRING_TYPE)) return; argc = at_argv->num_elements; if (argc == 0) { SLang_verror (SL_INVALID_PARM, "pvm_spawn: argv has no elements"); SLang_free_array (at_argv); return; } if (NULL == (argv = (char **)SLmalloc ((argc+1) * sizeof (char *)))) { SLang_free_array (at_argv); return; } if (NULL == (at_tids = create_int_array (*ntasks))) { SLang_free_array (at_argv); SLfree ((char *)argv); return; } argv_data = (char **) at_argv->data; task = argv_data[0]; for (i = 1; i < argc; i++) { if (argv_data[i] == NULL) break; argv [i-1] = argv_data[i]; } argv[i-1] = NULL; tids = (int *)at_tids->data; (void) pvm_spawn (task, argv, *flag, where, *ntasks, tids); SLang_free_array (at_argv); SLfree ((char *)argv); if (*ntasks == 1) SLang_push_integer (*tids); else SLang_push_array (at_tids, 0); SLang_free_array (at_tids); } static int _pvm_mytid (void) { return pvm_mytid (); } static int _pvm_parent (void) { return pvm_parent (); } static void _pvm_exit (void) { if (0 != pvm_exit ()) SLang_vmessage ("pvm_exit failed\n"); } static int _pvm_initsend (int *encoding) { int bufid; bufid = pvm_initsend (*encoding); return bufid; } static void _pvm_pack (void) { unsigned int nargs; nargs = (unsigned int) SLang_Num_Function_Args; if (-1 == SLreverse_stack ((int) nargs)) return; while (nargs) { SLang_Array_Type *at; int info; VOID_STAR data; unsigned int num_elements; nargs--; if (-1 == SLang_pop_array (&at, 1)) return; data = at->data; num_elements = at->num_elements; switch (at->data_type) { case SLANG_CHAR_TYPE: case SLANG_UCHAR_TYPE: info = pvm_pkbyte ((char*)data, num_elements, 1); break; case SLANG_SHORT_TYPE: info = pvm_pkshort ((short*)data, num_elements, 1); break; case SLANG_USHORT_TYPE: info = pvm_pkushort ((unsigned short*)data, num_elements, 1); break; case SLANG_INT_TYPE: info = pvm_pkint ((int*)data, num_elements, 1); break; case SLANG_UINT_TYPE: info = pvm_pkuint ((unsigned int*)data, num_elements, 1); break; case SLANG_LONG_TYPE: info = pvm_pklong ((long*)data, num_elements, 1); break; case SLANG_ULONG_TYPE: info = pvm_pkulong ((unsigned long*)data, num_elements, 1); break; case SLANG_FLOAT_TYPE: info = pvm_pkfloat ((float*)data, num_elements, 1); break; case SLANG_DOUBLE_TYPE: info = pvm_pkdouble ((double *)data, num_elements, 1); break; case SLANG_COMPLEX_TYPE: info = pvm_pkdcplx ((double *)data, num_elements, 1); break; case SLANG_STRING_TYPE: if (num_elements) info = pvm_pkstr (*(char **)data); else info = 0; break; default: SLang_verror (SL_INTRINSIC_ERROR, "pvm_pack: %s not supported", SLclass_get_datatype_name (at->data_type)); info = -1; } SLang_free_array (at); if (info < 0) { (void) throw_pvm_exception (info); return; } } } static int _pvm_unpack_internal (SLtype data_type, VOID_STAR data, unsigned int num_elements) { int info; switch (data_type) { case SLANG_CHAR_TYPE: case SLANG_UCHAR_TYPE: info = pvm_upkbyte ((char*)data, num_elements, 1); break; case SLANG_SHORT_TYPE: info = pvm_upkshort ((short*)data, num_elements, 1); break; case SLANG_USHORT_TYPE: info = pvm_upkushort ((unsigned short*)data, num_elements, 1); break; case SLANG_INT_TYPE: info = pvm_upkint ((int*)data, num_elements, 1); break; case SLANG_UINT_TYPE: info = pvm_upkuint ((unsigned int*)data, num_elements, 1); break; case SLANG_LONG_TYPE: info = pvm_upklong ((long*)data, num_elements, 1); break; case SLANG_ULONG_TYPE: info = pvm_upkulong ((unsigned long*)data, num_elements, 1); break; case SLANG_FLOAT_TYPE: info = pvm_upkfloat ((float*)data, num_elements, 1); break; case SLANG_DOUBLE_TYPE: info = pvm_upkdouble ((double *)data, num_elements, 1); break; case SLANG_COMPLEX_TYPE: info = pvm_upkdcplx ((double *)data, num_elements, 1); break; case SLANG_STRING_TYPE: { int nbytes, msgtag, tid; char *buf; info = pvm_bufinfo (pvm_getrbuf(), &nbytes, &msgtag, &tid); if (info < 0) { throw_pvm_exception (info); return -1; } if (NULL == (buf = SLmalloc (nbytes + 1))) return -1; info = pvm_upkstr (buf); if (info < 0) { throw_pvm_exception (info); SLfree (buf); return -1; } if (NULL == (*(char **)data = SLang_create_slstring (buf))) { SLfree (buf); return -1; } SLfree (buf); } break; default: SLang_verror (SL_INTRINSIC_ERROR, "pvm_pack: %s not supported", SLclass_get_datatype_name (data_type)); info = -1; } if (info < 0) { (void) throw_pvm_exception (info); return -1; } return 0; } static void _pvm_unpack (void) { int num_elements = 1; SLtype type; int need_array = 0; SLang_Array_Type *at; if (SLang_Num_Function_Args == 2) { need_array = 1; if (-1 == SLang_pop_integer (&num_elements)) return; if (num_elements < 0) { SLang_verror (SL_INVALID_PARM, "pvm_unpack: num-elements should >0"); return; } } if (-1 == SLang_pop_datatype (&type)) return; if (NULL == (at = SLang_create_array (type, 0, NULL, &num_elements, 1))) return; if (-1 == _pvm_unpack_internal (type, at->data, num_elements)) { SLang_free_array (at); return; } if (need_array) (void) SLang_push_array (at, 0); else (void) SLang_push_value (type, at->data); SLang_free_array (at); } static int _pvm_recv (int *tid, int *msgtag) { return throw_pvm_exception (pvm_recv (*tid, *msgtag)); } static void _pvm_send (int *tid, int *msgtag) { (void) throw_pvm_exception (pvm_send (*tid, *msgtag)); } static void _pvm_notify (void) { int what, msgtag, info; if (-1 == SLreverse_stack (SLang_Num_Function_Args)) return; /* stack: tids, msgtag, what */ if (-1 == pop_2_ints (&msgtag, &what)) return; if ((what == PvmTaskExit) || (what == PvmHostDelete)) { SLang_Array_Type *at; if (-1 == SLang_pop_array_of_type (&at, SLANG_INT_TYPE)) return; info = pvm_notify (what, msgtag, at->num_elements, (int *)at->data); SLang_free_array (at); } else if (what == PvmHostAdd) { int cnt; if (-1 == SLang_pop_integer (&cnt)) return; info = pvm_notify (what, msgtag, cnt, NULL); } else { SLang_verror (SL_INVALID_PARM, "pvm_notify: event to trigger parameter is invalid"); return; } (void) throw_pvm_exception (info); } static void _pvm_bufinfo (int *bufid) { int bytes, tid, msgtag, info; info = pvm_bufinfo (*bufid, &bytes, &msgtag, &tid); if (info < 0) { throw_pvm_exception (info); return; } (void) SLang_push_integer (bytes); (void) SLang_push_integer (msgtag); (void) SLang_push_integer (tid); } static int _pvm_probe (int *tid, int *msgtag) { return throw_pvm_exception (pvm_probe (*tid, *msgtag)); } static int _pvm_archcode (char *arch) { return throw_pvm_exception (pvm_archcode (arch)); } static int _pvm_addhost (char *host) { int info; return pvm_addhosts (&host, 1, &info); } static void _pvm_delhost (char *host) { int info; throw_pvm_exception (pvm_delhosts (&host, 1, &info)); } static void _pvm_export (char *name) { (void) pvm_export (name); } static void _pvm_freebuf (int *bufid) { (void) throw_pvm_exception (pvm_freebuf (*bufid)); } static void _pvm_freecontext (int *ctx) { (void) throw_pvm_exception (pvm_freecontext (*ctx)); } static int _pvm_getcontext (void) { return throw_pvm_exception (pvm_getcontext ()); } static int _pvm_newcontext (void) { return throw_pvm_exception (pvm_newcontext ()); } static int _pvm_setcontext (int *ctx) { return throw_pvm_exception (pvm_setcontext (*ctx)); } static int _pvm_getopt (int *what) { return throw_pvm_exception (pvm_getopt (*what)); } static int _pvm_nrecv (int *tid, int *msgtag) { return throw_pvm_exception (pvm_nrecv (*tid, *msgtag)); } static void _pvm_sendsig (int *tid, int *sig) { (void) throw_pvm_exception (pvm_sendsig (*tid, *sig)); } static int _pvm_tidtohost (int *tid) { return throw_pvm_exception (pvm_tidtohost (*tid)); } static int _pvm_setopt (int *opt, int *val) { return throw_pvm_exception (pvm_setopt (*opt, *val)); } typedef struct { int narch; SLang_Array_Type *hi_tid; SLang_Array_Type *hi_name; SLang_Array_Type *hi_arch; SLang_Array_Type *hi_speed; SLang_Array_Type *hi_dsig; } Host_Config_Type; static SLang_CStruct_Field_Type Config_Struct [] = { MAKE_CSTRUCT_FIELD(Host_Config_Type, narch, "narch", SLANG_INT_TYPE, 0), MAKE_CSTRUCT_FIELD(Host_Config_Type, hi_tid, "hi_tid", SLANG_ARRAY_TYPE, 0), MAKE_CSTRUCT_FIELD(Host_Config_Type, hi_name, "hi_name", SLANG_ARRAY_TYPE, 0), MAKE_CSTRUCT_FIELD(Host_Config_Type, hi_arch, "hi_arch", SLANG_ARRAY_TYPE, 0), MAKE_CSTRUCT_FIELD(Host_Config_Type, hi_speed, "hi_speed", SLANG_ARRAY_TYPE, 0), MAKE_CSTRUCT_FIELD(Host_Config_Type, hi_dsig, "hi_dsig", SLANG_ARRAY_TYPE, 0), SLANG_END_CSTRUCT_TABLE }; static void _pvm_config (void) { int nhost, narch; struct pvmhostinfo *hostp; Host_Config_Type h; int i; if (throw_pvm_exception (pvm_config (&nhost, &narch, &hostp)) < 0) return; memset ((char *) &h, sizeof(h), 0); h.narch = narch; if ((NULL == (h.hi_tid = create_int_array (nhost))) || (NULL == (h.hi_name = create_string_array (nhost))) || (NULL == (h.hi_arch = create_string_array (nhost))) || (NULL == (h.hi_speed = create_int_array (nhost))) || (NULL == (h.hi_dsig = create_int_array (nhost)))) goto free_return; /* Ok for the slang errors to occur below --- no need to check failures */ for (i = 0; i < nhost; i++) { ((int *)(h.hi_tid->data))[i] = hostp[i].hi_tid; ((char **)(h.hi_name->data))[i] = SLang_create_slstring (hostp[i].hi_name); ((char **)(h.hi_arch->data))[i] = SLang_create_slstring (hostp[i].hi_arch); ((int *)(h.hi_speed->data))[i] = hostp[i].hi_speed; ((int *)(h.hi_dsig->data))[i] = hostp[i].hi_dsig; } (void) SLang_push_cstruct ((VOID_STAR) &h, Config_Struct); free_return: SLang_free_array (h.hi_tid); SLang_free_array (h.hi_name); SLang_free_array (h.hi_arch); SLang_free_array (h.hi_speed); SLang_free_array (h.hi_dsig); } static int _pvm_getrbuf (void) { return throw_pvm_exception (pvm_getrbuf ()); } static int _pvm_getsbuf (void) { return throw_pvm_exception (pvm_getsbuf ()); } static void _pvm_halt (void) { (void) throw_pvm_exception (pvm_halt ()); } static void _pvm_kill (int *tid) { (void) throw_pvm_exception (pvm_kill (*tid)); } static int _pvm_mstat (char *host) { return pvm_mstat (host); } static int _pvm_pstat (int *tid) { return pvm_pstat (*tid); } typedef struct { SLang_Array_Type *ti_tid; SLang_Array_Type *ti_ptid; SLang_Array_Type *ti_host; SLang_Array_Type *ti_flag; SLang_Array_Type *ti_a_out; } Task_Info_Type; static SLang_CStruct_Field_Type TaskInfo_Struct [] = { MAKE_CSTRUCT_FIELD(Task_Info_Type, ti_tid, "ti_tid", SLANG_ARRAY_TYPE, 0), MAKE_CSTRUCT_FIELD(Task_Info_Type, ti_ptid, "ti_ptid", SLANG_ARRAY_TYPE, 0), MAKE_CSTRUCT_FIELD(Task_Info_Type, ti_host, "ti_host", SLANG_ARRAY_TYPE, 0), MAKE_CSTRUCT_FIELD(Task_Info_Type, ti_flag, "ti_flag", SLANG_ARRAY_TYPE, 0), MAKE_CSTRUCT_FIELD(Task_Info_Type, ti_a_out, "ti_a_out", SLANG_ARRAY_TYPE, 0), SLANG_END_CSTRUCT_TABLE }; static void _pvm_tasks (int *where) { int ntask; struct pvmtaskinfo *taskinfo; Task_Info_Type t; int i, status; status = pvm_tasks (*where, &ntask, &taskinfo); if (status == PvmNoHost) { SLang_push_null (); return; } throw_pvm_exception (status); memset ((char *) &t, sizeof(t), 0); if ((NULL == (t.ti_tid = create_int_array (ntask))) || (NULL == (t.ti_ptid = create_int_array (ntask))) || (NULL == (t.ti_host = create_int_array (ntask))) || (NULL == (t.ti_flag = create_int_array (ntask))) || (NULL == (t.ti_a_out = create_string_array (ntask)))) goto free_return; /* Ok for the slang errors to occur below --- no need to check failures */ for (i = 0; i < ntask; i++) { ((int *)(t.ti_tid->data))[i] = taskinfo[i].ti_tid; ((int *)(t.ti_ptid->data))[i] = taskinfo[i].ti_ptid; ((int *)(t.ti_host->data))[i] = taskinfo[i].ti_host; ((int *)(t.ti_flag->data))[i] = taskinfo[i].ti_flag; ((char **)(t.ti_a_out->data))[i] = SLang_create_slstring (taskinfo[i].ti_a_out); } (void) SLang_push_cstruct ((VOID_STAR) &t, TaskInfo_Struct); free_return: SLang_free_array (t.ti_tid); SLang_free_array (t.ti_ptid); SLang_free_array (t.ti_host); SLang_free_array (t.ti_flag); SLang_free_array (t.ti_a_out); } static void _pvm_mcast (int *msgid) { SLang_Array_Type *at; if (-1 == SLang_pop_array_of_type (&at, SLANG_INT_TYPE)) return; if (at->num_elements) throw_pvm_exception (pvm_mcast ((int *)at->data, at->num_elements, *msgid)); SLang_free_array (at); } #if 0 static void not_implemented (void) { SLang_verror (SL_NOT_IMPLEMENTED, "Not implemented"); } static void _pvm_psend (void) { /* I do not know how I can implement this one without a memory leak. * The best I can do is to make it operate in a synchronous manner. */ not_implemented (); } static void _pvm_precv (void) { not_implemented (); } static void _pvm_perror (void) { not_implemented (); } static void _pvm_addmhf (void) { not_implemented (); } static void _pvm_delinfo (void) { not_implemented (); } static void _pvm_delmhf (void) { not_implemented (); } static void _pvm_gather (void) { not_implemented (); } static void _pvm_getfds (void) { not_implemented (); } static void _pvm_getminfo (void) { not_implemented (); } static void _pvm_getnoresets (void) { not_implemented (); } static void _pvm_hostsync (void) { not_implemented (); } static void _pvm_getmboxinfo (void) { not_implemented (); } static void _pvm_mkbuf (void) { not_implemented (); } static void _pvm_putinfo (void) { not_implemented (); } static void _pvm_recvinfo (void) { not_implemented (); } static void _pvm_reduce (void) { not_implemented (); } static void _pvm_reg_hoster (void) { not_implemented (); } static void _pvm_reg_rm (void) { not_implemented (); } static void _pvm_reg_tasker (void) { not_implemented (); } static void _pvm_reg_tracer (void) { not_implemented (); } static void _pvm_scatter (void) { not_implemented (); } static void _pvm_setminfo (void) { not_implemented (); } static void _pvm_setrbuf (void) { not_implemented (); } static void _pvm_setsbuf (void) { not_implemented (); } static void _pvm_siblings (void) { not_implemented (); } static void _pvm_start_pvmd (void) { not_implemented (); } static void _pvm_tickle (void) { not_implemented (); } static void _pvm_trecv (void) { not_implemented (); } static void _pvm_unexport (void) { not_implemented (); } static void _pvm_version (void) { not_implemented (); } #endif #define USE_GROUP_FUNCTIONS 1 #if USE_GROUP_FUNCTIONS /* There are the group functions, which are in a separate library. */ static void _pvm_bcast (char *group, int *msgtag) { (void) throw_pvm_exception (pvm_bcast (group, *msgtag)); } static int _pvm_getinst (char *group, int *tid) { return throw_pvm_exception (pvm_getinst (group, *tid)); } static void _pvm_barrier (char *group, int *count) { throw_pvm_exception (pvm_barrier (group, *count)); } static void _pvm_lvgroup (char *group) { throw_pvm_exception (pvm_lvgroup (group)); } static int _pvm_gettid (char *group, int *inum) { return throw_pvm_exception (pvm_gettid (group, *inum)); } static int _pvm_gsize (char *group) { return throw_pvm_exception (pvm_gsize (group)); } static int _pvm_joingroup (char *group) { return throw_pvm_exception (pvm_joingroup(group)); } #endif static void sigterm_handler (int sig) { killpg (0, sig); exit (1); } static void _pvm_sigterm_enable (int *mode) { if (*mode == 0) { (void) SLsignal (SIGTERM, SIG_DFL); return; } /* Make this process its own group leader. This is done to avoid * killing the pvm daemon, which otherwise is a member of the current * process group. */ (void) setpgid (getpid (), getpid ()); SLsignal (SIGTERM, sigterm_handler); } #define USE_TRACING_FUNCTIONS 1 #if USE_TRACING_FUNCTIONS /* At this time, the only tracing functions, constants and data types * included are those necessary to interface with XPVM. */ #include <pvmtev.h> typedef struct { Pvmtmask trace_mask; } Pvmtmask_Type; static int Pvmtmask_Type_Id = -1; static void destroy_pvmtmask_type (SLtype type, VOID_STAR f) { (void) type; (void) f; } static void _pvm_settmask (int *tid, Pvmtmask_Type *tm) { pvm_settmask (*tid, tm->trace_mask); } static void _tev_mask_init (Pvmtmask_Type *tm) { TEV_MASK_INIT (tm->trace_mask); } static void _tev_mask_set (Pvmtmask_Type *tm, int *m) { TEV_MASK_SET (tm->trace_mask, *m); } #endif #define DUMMY_MODEL_TYPE 255 #define V SLANG_VOID_TYPE #define I SLANG_INT_TYPE #define S SLANG_STRING_TYPE static SLang_Intrin_Fun_Type Module_Intrinsics [] = { MAKE_INTRINSIC_1("pvm_delhost", _pvm_delhost, V, S), MAKE_INTRINSIC_1("pvm_export", _pvm_export, V, S), MAKE_INTRINSIC_1("pvm_freebuf", _pvm_freebuf, V, I), MAKE_INTRINSIC_1("pvm_freecontext", _pvm_freecontext, V, I), MAKE_INTRINSIC_0("pvm_getcontext", _pvm_getcontext, I), MAKE_INTRINSIC_0("pvm_newcontext", _pvm_newcontext, I), MAKE_INTRINSIC_1("pvm_setcontext", _pvm_setcontext, I, I), MAKE_INTRINSIC_1("pvm_getopt", _pvm_getopt, I, I), MAKE_INTRINSIC_2("pvm_nrecv", _pvm_nrecv, I, I, I), MAKE_INTRINSIC_2("pvm_sendsig", _pvm_sendsig, V, I, I), MAKE_INTRINSIC_1("pvm_tidtohost", _pvm_tidtohost, I, I), MAKE_INTRINSIC_2("pvm_setopt", _pvm_setopt, I, I, I), MAKE_INTRINSIC_0("pvm_config", _pvm_config, V), MAKE_INTRINSIC_0("pvm_getrbuf", _pvm_getrbuf, I), MAKE_INTRINSIC_0("pvm_getsbuf", _pvm_getsbuf, I), MAKE_INTRINSIC_0("pvm_halt", _pvm_halt, V), MAKE_INTRINSIC_1("pvm_tasks", _pvm_tasks, V, I), MAKE_INTRINSIC_1("pvm_kill", _pvm_kill, V, I), MAKE_INTRINSIC_1("pvm_mstat", _pvm_mstat, I, S), MAKE_INTRINSIC_1("pvm_pstat", _pvm_pstat, I, I), MAKE_INTRINSIC_1("pvm_mcast", _pvm_mcast, V, I), MAKE_INTRINSIC_1("pvm_addhost", _pvm_addhost, I, S), MAKE_INTRINSIC_1("pvm_archcode", _pvm_archcode, I, S), MAKE_INTRINSIC_2("pvm_probe", _pvm_probe, I, I, I), MAKE_INTRINSIC_1("pvm_bufinfo", _pvm_bufinfo, V, I), MAKE_INTRINSIC_0("pvm_notify", _pvm_notify, V), MAKE_INTRINSIC_0("pvm_unpack", _pvm_unpack, V), MAKE_INTRINSIC_2("pvm_send", _pvm_send, V, I, I), MAKE_INTRINSIC_2("pvm_recv", _pvm_recv, I, I, I), MAKE_INTRINSIC_0("pvm_pack", _pvm_pack, V), MAKE_INTRINSIC_1("pvm_initsend", _pvm_initsend, I, I), MAKE_INTRINSIC_0("pvm_exit", _pvm_exit, V), MAKE_INTRINSIC_0("pvm_mytid", _pvm_mytid, I), MAKE_INTRINSIC_0("pvm_parent", _pvm_parent, I), MAKE_INTRINSIC_3("pvm_spawn", _pvm_spawn, V, I, S, I), #if USE_GROUP_FUNCTIONS MAKE_INTRINSIC_2("pvm_barrier", _pvm_barrier, V, S, I), MAKE_INTRINSIC_2("pvm_getinst", _pvm_getinst, I, S, I), MAKE_INTRINSIC_2("pvm_bcast", _pvm_bcast, V, S, I), MAKE_INTRINSIC_2("pvm_gettid", _pvm_gettid, I, S, I), MAKE_INTRINSIC_1("pvm_gsize", _pvm_gsize, I, S), MAKE_INTRINSIC_1("pvm_joingroup", _pvm_joingroup, V, S), MAKE_INTRINSIC_1("pvm_lvgroup", _pvm_lvgroup, V, S), #endif #if USE_TRACING_FUNCTIONS MAKE_INTRINSIC_2("pvm_settmask", _pvm_settmask, V, I, DUMMY_MODEL_TYPE), MAKE_INTRINSIC_1("pvm_tev_mask_init", _tev_mask_init, V, DUMMY_MODEL_TYPE), MAKE_INTRINSIC_2("pvm_tev_mask_set", _tev_mask_set, V, DUMMY_MODEL_TYPE, I), #endif MAKE_INTRINSIC_1("pvm_sigterm_enable", _pvm_sigterm_enable, V, I), MAKE_INTRINSIC_1("__datatype", datatype_intrinsic, V, I), SLANG_END_INTRIN_FUN_TABLE }; static SLang_Intrin_Var_Type Module_Variables [] = { MAKE_VARIABLE("_pvm_module_version_string", &Module_Version_String, SLANG_STRING_TYPE, 1), SLANG_END_INTRIN_VAR_TABLE }; static SLang_IConstant_Type Module_IConstants [] = { MAKE_ICONSTANT("_pvm_module_version", MODULE_VERSION_NUMBER), SLANG_END_ICONST_TABLE }; static SLang_IConstant_Type Module_Constants [] = { MAKE_ICONSTANT("PvmDataDefault", PvmDataDefault), MAKE_ICONSTANT("PvmDataRaw", PvmDataRaw), MAKE_ICONSTANT("PvmDataInPlace", PvmDataInPlace), MAKE_ICONSTANT("PvmDataTrace", PvmDataTrace), MAKE_ICONSTANT("PvmTaskDefault", PvmTaskDefault), MAKE_ICONSTANT("PvmTaskHost", PvmTaskHost), MAKE_ICONSTANT("PvmTaskArch", PvmTaskArch), MAKE_ICONSTANT("PvmTaskDebug", PvmTaskDebug), MAKE_ICONSTANT("PvmTaskTrace", PvmTaskTrace), MAKE_ICONSTANT("PvmMppFront", PvmMppFront), MAKE_ICONSTANT("PvmHostCompl", PvmHostCompl), MAKE_ICONSTANT("PvmNoSpawnParent", PvmNoSpawnParent), MAKE_ICONSTANT("PvmTaskExit", PvmTaskExit), MAKE_ICONSTANT("PvmHostDelete", PvmHostDelete), MAKE_ICONSTANT("PvmHostAdd", PvmHostAdd), MAKE_ICONSTANT("PvmRouteAdd", PvmRouteAdd), MAKE_ICONSTANT("PvmRouteDelete", PvmRouteDelete), MAKE_ICONSTANT("PvmNotifyCancel", PvmNotifyCancel), MAKE_ICONSTANT("PvmRoute", PvmRoute), MAKE_ICONSTANT("PvmDontRoute", PvmDontRoute), MAKE_ICONSTANT("PvmAllowDirect", PvmAllowDirect), MAKE_ICONSTANT("PvmRouteDirect", PvmRouteDirect), MAKE_ICONSTANT("PvmDebugMask", PvmDebugMask), MAKE_ICONSTANT("PvmAutoErr", PvmAutoErr), MAKE_ICONSTANT("PvmOutputTid", PvmOutputTid), MAKE_ICONSTANT("PvmOutputCode", PvmOutputCode), MAKE_ICONSTANT("PvmTraceTid", PvmTraceTid), MAKE_ICONSTANT("PvmTraceCode", PvmTraceCode), MAKE_ICONSTANT("PvmTraceBuffer", PvmTraceBuffer), MAKE_ICONSTANT("PvmTraceOptions", PvmTraceOptions), MAKE_ICONSTANT("PvmTraceFull", PvmTraceFull), MAKE_ICONSTANT("PvmTraceTime", PvmTraceTime), MAKE_ICONSTANT("PvmTraceCount", PvmTraceCount), MAKE_ICONSTANT("PvmFragSize", PvmFragSize), MAKE_ICONSTANT("PvmResvTids", PvmResvTids), MAKE_ICONSTANT("PvmSelfOutputTid", PvmSelfOutputTid), MAKE_ICONSTANT("PvmSelfOutputCode", PvmSelfOutputCode), MAKE_ICONSTANT("PvmSelfTraceTid", PvmSelfTraceTid), MAKE_ICONSTANT("PvmSelfTraceCode", PvmSelfTraceCode), MAKE_ICONSTANT("PvmSelfTraceBuffer", PvmSelfTraceBuffer), MAKE_ICONSTANT("PvmSelfTraceOptions", PvmSelfTraceOptions), MAKE_ICONSTANT("PvmShowTids", PvmShowTids), MAKE_ICONSTANT("PvmPollType", PvmPollType), MAKE_ICONSTANT("PvmPollConstant", PvmPollConstant), MAKE_ICONSTANT("PvmPollSleep", PvmPollSleep), MAKE_ICONSTANT("PvmPollTime", PvmPollTime), MAKE_ICONSTANT("PvmOutputContext", PvmOutputContext), MAKE_ICONSTANT("PvmTraceContext", PvmTraceContext), MAKE_ICONSTANT("PvmSelfOutputContext", PvmSelfOutputContext), MAKE_ICONSTANT("PvmSelfTraceContext", PvmSelfTraceContext), MAKE_ICONSTANT("PvmNoReset", PvmNoReset), MAKE_ICONSTANT("PvmTaskSelf", PvmTaskSelf), MAKE_ICONSTANT("PvmTaskChild", PvmTaskChild), MAKE_ICONSTANT("PvmBaseContext", PvmBaseContext), MAKE_ICONSTANT("PvmMboxDefault", PvmMboxDefault), MAKE_ICONSTANT("PvmMboxPersistent", PvmMboxPersistent), MAKE_ICONSTANT("PvmMboxMultiInstance", PvmMboxMultiInstance), MAKE_ICONSTANT("PvmMboxOverWritable", PvmMboxOverWritable), MAKE_ICONSTANT("PvmMboxFirstAvail", PvmMboxFirstAvail), MAKE_ICONSTANT("PvmMboxReadAndDelete", PvmMboxReadAndDelete), MAKE_ICONSTANT("PvmMboxWaitForInfo", PvmMboxWaitForInfo), MAKE_ICONSTANT("PvmOk", PvmOk), MAKE_ICONSTANT("PvmBadParam", PvmBadParam), MAKE_ICONSTANT("PvmMismatch", PvmMismatch), MAKE_ICONSTANT("PvmOverflow", PvmOverflow), MAKE_ICONSTANT("PvmNoData", PvmNoData), MAKE_ICONSTANT("PvmNoHost", PvmNoHost), MAKE_ICONSTANT("PvmNoFile", PvmNoFile), MAKE_ICONSTANT("PvmDenied", PvmDenied), MAKE_ICONSTANT("PvmNoMem", PvmNoMem), MAKE_ICONSTANT("PvmBadMsg", PvmBadMsg), MAKE_ICONSTANT("PvmSysErr", PvmSysErr), MAKE_ICONSTANT("PvmNoBuf", PvmNoBuf), MAKE_ICONSTANT("PvmNoSuchBuf", PvmNoSuchBuf), MAKE_ICONSTANT("PvmNullGroup", PvmNullGroup), MAKE_ICONSTANT("PvmDupGroup", PvmDupGroup), MAKE_ICONSTANT("PvmNoGroup", PvmNoGroup), MAKE_ICONSTANT("PvmNotInGroup", PvmNotInGroup), MAKE_ICONSTANT("PvmNoInst", PvmNoInst), MAKE_ICONSTANT("PvmHostFail", PvmHostFail), MAKE_ICONSTANT("PvmNoParent", PvmNoParent), MAKE_ICONSTANT("PvmNotImpl", PvmNotImpl), MAKE_ICONSTANT("PvmDSysErr", PvmDSysErr), MAKE_ICONSTANT("PvmBadVersion", PvmBadVersion), MAKE_ICONSTANT("PvmOutOfRes", PvmOutOfRes), MAKE_ICONSTANT("PvmDupHost", PvmDupHost), MAKE_ICONSTANT("PvmCantStart", PvmCantStart), MAKE_ICONSTANT("PvmAlready", PvmAlready), MAKE_ICONSTANT("PvmNoTask", PvmNoTask), MAKE_ICONSTANT("PvmNotFound", PvmNotFound), MAKE_ICONSTANT("PvmExists", PvmExists), MAKE_ICONSTANT("PvmHostrNMstr", PvmHostrNMstr), MAKE_ICONSTANT("PvmParentNotSet", PvmParentNotSet), MAKE_ICONSTANT("PvmNoEntry", PvmNoEntry), MAKE_ICONSTANT("PvmDupEntry", PvmDupEntry), #if USE_TRACING_FUNCTIONS MAKE_ICONSTANT("TEV_MCAST", TEV_MCAST), MAKE_ICONSTANT("TEV_SEND", TEV_SEND), MAKE_ICONSTANT("TEV_RECV", TEV_RECV), MAKE_ICONSTANT("TEV_NRECV", TEV_NRECV), #endif MAKE_ICONSTANT("_pvm_module_version", MODULE_VERSION_NUMBER), MAKE_ICONSTANT("_pvm_library_version", MAKE_VERSION(PVM_MAJOR_VERSION,PVM_MINOR_VERSION,PVM_PATCH_VERSION)), SLANG_END_ICONST_TABLE }; #if USE_TRACING_FUNCTIONS static void patchup_intrinsic_table (void) /*{{{*/ { SLang_Intrin_Fun_Type *f; f = Module_Intrinsics; while (f->name != NULL) { unsigned int i, nargs; SLtype *args; nargs = f->num_args; args = f->arg_types; for (i = 0; i < nargs; i++) { if (args[i] == DUMMY_MODEL_TYPE) args[i] = Pvmtmask_Type_Id; } /* For completeness */ if (f->return_type == DUMMY_MODEL_TYPE) f->return_type = Pvmtmask_Type_Id; f++; } } /*}}}*/ #endif int init_pvm_module_ns (char *ns_name) { #if USE_TRACING_FUNCTIONS SLang_Class_Type *cl; #endif SLang_NameSpace_Type *ns = SLns_create_namespace (ns_name); if (ns == NULL) return -1; if ((-1 == SLns_add_intrin_fun_table (ns, Module_Intrinsics, "__PVM__")) || (-1 == SLns_add_intrin_var_table (ns, Module_Variables, NULL)) || (-1 == SLns_add_iconstant_table (ns, Module_Constants, NULL)) || (-1 == SLns_add_iconstant_table (ns, Module_IConstants, NULL)) ) return -1; #if USE_TRACING_FUNCTIONS if (Pvmtmask_Type_Id == -1) { if (NULL == (cl = SLclass_allocate_class ("Pvmtmask_Type"))) return -1; (void) SLclass_set_destroy_function (cl, destroy_pvmtmask_type); if (-1 == SLclass_register_class (cl, SLANG_VOID_TYPE, sizeof (Pvmtmask_Type), SLANG_CLASS_TYPE_MMT)) return -1; Pvmtmask_Type_Id = SLclass_get_class_id (cl); patchup_intrinsic_table (); } #endif return 0; } /* This function is optional */ void deinit_pvm_module (void) { } ���������������������������������������������������������������������������������������������������pvm-0.1.5/src/pvm.sl��������������������������������������������������������������������������������0000644�0026061�0026061�00000010376�10245725137�014535� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%-*- mode: slang; mode: fold; -*- import ("pvm"); #iffalse require ("xpvm"); #ifexists xpvm_setup % optionally support using XPVM for process tracing xpvm_setup (); #endif #endif public define pvm_psend () %{{{ { variable objs = __pop_args (_NARGS-2); variable msgid = (); variable tid = (); () = pvm_initsend (PvmDataDefault); foreach (objs) { variable data = (); pvm_pack (data.value); } pvm_send (tid, msgid); } %}}} static define pack_item (); static define unpack_item (); static define unpack_strings (num) %{{{ { if (num == 0) return String_Type[0]; variable s = DataType_Type[num]; s[*] = String_Type; return array_map (String_Type, &pvm_unpack, s); } %}}} static define pack_strings (a) %{{{ { if (length (a) > 0) array_map (Void_Type, &pvm_pack, a); } %}}} static define unpack_one_struct (i) %{{{ { variable names, s; names = unpack_item (); if (typeof(names) != Array_Type) names = [names]; eval (sprintf ("define __atos__(){return struct {%s};}", strjoin (names, ","))); s = eval ("__atos__()"); foreach (names) { variable n = (); set_struct_field (s, n, unpack_item()); } return s; } %}}} static define pack_one_struct (s) %{{{ { variable names, value; names = get_struct_field_names (s); pack_item (names); foreach (names) { variable name = (); value = get_struct_field (s, name); pack_item (value); } } %}}} static define unpack_struct (num) %{{{ { if (num == 0) return Struct_Type[0]; return array_map (Struct_Type, &unpack_one_struct, [0:num-1]); } %}}} static define pack_struct (a) %{{{ { array_map (Void_Type, &pack_one_struct, a); } %}}} static define unpack_one_assoc (num) %{{{ { variable names = unpack_item (); if (length(names) == 1) names = [names]; variable a = Assoc_Type[]; foreach (names) { variable n = (); a[n] = unpack_item (); } return a; } %}}} static define pack_one_assoc (a) %{{{ { variable names = assoc_get_keys (a); pack_item (names); foreach (names) { variable n = (); pack_item (a[n]); } } %}}} static define unpack_assoc (len) %{{{ { if (len == 0) return Assoc_Type[]; return unpack_one_assoc (len); } %}}} static define pack_assoc (a) %{{{ { pack_one_assoc(a); } %}}} static define unpack_item () %{{{ { variable type, num, item; type = __datatype(pvm_unpack (Int_Type, 1)[0]); num = pvm_unpack (Int_Type, 1)[0]; switch (type) { case String_Type: item = unpack_strings (num); } { case Struct_Type: item = unpack_struct (num); } { case Assoc_Type: item = unpack_assoc (num); } { case Null_Type: item = Null_Type[num]; } { % default item = pvm_unpack (type, num); } if (num == 1 and type != Assoc_Type) return item[0]; return item; } %}}} static define pack_item (item) %{{{ { variable type; if (is_struct_type (item)) type = typeof (struct{x}); else type = _typeof(item); pvm_pack (__class_id(type)); pvm_pack (length(item)); switch (type) { case String_Type: pack_strings (item); } { case Struct_Type: pack_struct (item); } { case Assoc_Type: pack_assoc (item); } { case Null_Type: return; } { % default: pvm_pack (item); } } %}}} public define pvm_send_obj () %{{{ { variable objs = __pop_args (_NARGS-2); variable msgid = (); variable tid = (); () = pvm_initsend (PvmDataDefault); foreach (objs) { variable data = (); pack_item (data.value); } pvm_send (tid, msgid); } %}}} public define pvm_recv_obj () %{{{ { return unpack_item (); } %}}} public define pvm_addhosts () %{{{ { variable args = __pop_args (_NARGS); variable hosts = [__push_args (args)]; return array_map (Int_Type, &pvm_addhost, hosts); } %}}} public define pvm_delhosts () %{{{ { variable args = __pop_args (_NARGS); variable hosts = [__push_args (args)]; array_map (Void_Type, &pvm_delhost, hosts); } %}}} provide ("pvm"); #ifexists add_doc_file $1 = path_concat (path_concat (path_dirname (__FILE__), "help"), "pvm.hlp"); if (NULL != stat_file ($1)) add_doc_file ($1); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/src/pvm_ms.sl�����������������������������������������������������������������������������0000644�0026061�0026061�00000031630�10234031746�015222� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%-*- mode: slang; mode: fold; -*- % This file provides routines that facilitate the creation of % master-slave PVM processes % The following public functions are provided: % % pvm_ms_set_message_callback (fun) % pvm_ms_set_hosts () % pvm_ms_run_master (pgms) % pvm_ms_slave_exit (exit_status) % pvm_ms_run_slave (argv) % pvm_ms_set_debug (debug) % pvm_ms_set_num_processes_per_host (num_processes) % pvm_ms_set_host_max_processes (hostname, max_processes) % pvm_ms_kill (mpid, spid) % pvm_ms_set_slave_spawned_callback (fun) % pvm_ms_set_slave_exit_failed_callback (fun) % pvm_ms_set_idle_host_callback (fun) % pvm_ms_add_new_slave (slave_argv) require ("pvm"); static variable Debug = 0; % Message Tags static variable TASK_COMPLETE_MSG = 1000; static variable TASK_EXIT_MSG = 1001; static variable HOST_DELETE_MSG = 1002; static variable HOST_ADD_MSG = 1003; static variable TASK_STDOUT_MSG = 1004; static variable TASK_STATUS_MSG = 1005; static variable TASK_KILL_MSG = 1006; % Slave status flags static variable SLAVE_NOTRUN = 1; % waiting in queue static variable SLAVE_RUNNING = 2; % running static variable SLAVE_EXITED = 4; % exited static variable Hosts = NULL; static variable Default_Max_Processes_Per_Host = 1; static variable Message_Callback_Hook = NULL; static variable Slave_Spawned_Callback_Hook = NULL; static variable Slave_Exit_Failed_Callback_Hook = NULL; static variable Idle_Host_Callback_Hook = NULL; %{{{ Routines for dealing with List of Slave Processes static variable Slave_List; static variable Slave_Index; public define pvm_ms_add_new_slave (slave_argv) { variable c = struct { next, slave_tid, status, host, argv, exit_status, stdout, index }; c.argv = slave_argv; c.host = NULL; c.slave_tid = NULL; c.status = SLAVE_NOTRUN; c.next = Slave_List; c.exit_status = NULL; c.stdout = ""; c.index = Slave_Index; Slave_List = c; Slave_Index++; } static define create_slave_list (pgms) { Slave_List = NULL; Slave_Index = 0; foreach (pgms) { variable slave_argv = (); pvm_ms_add_new_slave (slave_argv); } } static define next_slave (status) { variable c = Slave_List; while (c != NULL) { if (c.status & status) return c; c = c.next; } return c; } static define find_slave (tid) { variable c = Slave_List; while (c != NULL) { if (c.slave_tid == tid) return c; c = c.next; } return c; } %}}} %{{{ Routines for dealing with the list of Hosts static variable Host_List = NULL; static define add_new_host (hostname, ptid) { variable h = struct { hostname, ptid, nprocesses, max_processes, next }; h.hostname = hostname; h.ptid = ptid; h.nprocesses = 0; % if negative, then host is not available h.max_processes = Default_Max_Processes_Per_Host; h.next = Host_List; Host_List = h; } static define create_host_list () { Host_List = NULL; if (Hosts == NULL) { variable s = pvm_config (); _for (0, length (s.hi_name)-1, 1) { variable i = (); add_new_host (s.hi_name[i], s.hi_tid[i]); } return; } foreach (Hosts) { variable host = (); add_new_host (host, NULL); } } static define next_host () { variable h = Host_List; variable h_min, nmin; nmin = 0; h_min = NULL; while (h != NULL) { if ((h.max_processes - h.nprocesses >= nmin) and (h.nprocesses >= 0)) { nmin = h.max_processes - h.nprocesses; h_min = h; } h = h.next; } if (h_min == NULL) { () = fprintf (stderr, "No HOSTs to work with! Waiting for more...\n"); %pvm_exit (); %exit (1); } if (nmin == 0) return NULL; return h_min; } % may return Struct_Type or String_Type static define find_host_by_ptid (ptid) { variable h = Host_List; while (h != NULL) { if (h.ptid == ptid) return h; h = h.next; } % Not in our list. Try server's list h = pvm_config (); variable j = where (h.hi_tid == ptid); if (length (j) == 0) { () = fprintf (stderr, "*** WARNING: host ptid=%d not found\n", ptid); return NULL; } return h.hi_name[j[0]]; } static define delete_host (host) { host.nprocesses = -1; () = fprintf (stderr, "PVMD on host %S(%S) appears down\n", host.hostname, host.ptid); } %}}} %{{{ Routines for handling messages static define handle_task_exit (msgid, tid) { tid = pvm_unpack (Int_Type); variable slave = find_slave (tid); slave.host.nprocesses -= 1; if (slave.status != SLAVE_EXITED) { () = fprintf (stderr, "*** Task failed on host %s, will retry\n", slave.host.hostname); () = fprintf (stderr, " (stdout): %S\n", slave.stdout); slave.status = SLAVE_NOTRUN; if (Slave_Exit_Failed_Callback_Hook != NULL) @Slave_Exit_Failed_Callback_Hook (msgid, tid); sleep (1); return; } if (Debug) () = fprintf (stderr, "*** Task exit signal caught\n"); slave.status = SLAVE_EXITED; } static define handle_task_complete (msgid, tid) { variable exit_status = pvm_unpack (Int_Type); variable slave = find_slave (tid); slave.status = SLAVE_EXITED; slave.exit_status = exit_status; if (Debug) () = fprintf (stderr, "*** Task %d completed with status %d\n", tid, exit_status); } static define handle_host_delete (msgid, tid) { variable ptid = pvm_unpack (Int_Type); variable dtid; ERROR_BLOCK { _clear_error (); dtid = -1; } dtid = pvm_tidtohost (ptid); if (Debug) vmessage ("**DEBUG: handle_host_delete(%d,0x%X) obtained ptid=0x%X, dtid=0x%X", msgid, tid, ptid, dtid); variable host = find_host_by_ptid (dtid); if (host == NULL) return; delete_host (host); } static define handle_task_string (msgid, tid) { variable str = pvm_unpack (String_Type); vmessage ("Message from Task %d: %s", tid, str); } static define handle_task_stdout (msgid, tid) { tid = pvm_unpack (Int_Type); variable nbytes = pvm_unpack (Int_Type); if (nbytes <= 0) return; variable str = pvm_unpack (Char_Type, nbytes); str = array_to_bstring (str); variable slave = find_slave (tid); slave.stdout = strcat (slave.stdout, str);; if (Debug) vmessage ("%d stdout:\n %s", tid, str); } static define handle_task_status (msgid, tid) { variable c = Slave_List; variable str = ""; while (c != NULL) { variable slave_tid = c.slave_tid; if (slave_tid == NULL) slave_tid = -1; variable status = c.status; variable host = c.host; if (host != NULL) host = host.hostname; if (status == SLAVE_NOTRUN) status = "QUEUED"; else if (status == SLAVE_RUNNING) status = sprintf ("RUNNING on %S", host); else status = sprintf ("EXITED (status=%S)", c.exit_status); str += sprintf ("TID: 0x%X\nCmd: %s\nStatus: %s\nHost: %S\n", slave_tid, strjoin (c.argv, " "), status, host); str += sprintf ("Stdout:\n"); str += c.stdout; str += "\n\n"; c = c.next; } pvm_psend (tid, msgid, str); } static define handle_host_add (msgid, tid) { variable n = pvm_unpack (Int_Type); variable hids = pvm_unpack (Int_Type, n); foreach (hids) { variable hid = (); variable host = find_host_by_ptid (hid); if (host == NULL) continue; if (typeof (host) == String_Type) { vmessage ("Adding host %s", host); add_new_host (host, hid); } else vmessage ("Adding host %s", host.hostname); if (Idle_Host_Callback_Hook != NULL) @Idle_Host_Callback_Hook (); } } static define handle_task_kill (msgid, tid) { tid = pvm_unpack (Int_Type); if (tid == 0) { variable c = Slave_List; while (c != NULL) { if (c.slave_tid != NULL) { pvm_kill (c.slave_tid); () = fprintf (stderr, "Killed 0x%X\n", c.slave_tid); } c = c.next; } () = fprintf (stderr, "Task exiting from kill\n"); pvm_exit (); exit (1); } pvm_kill (tid); () = fprintf (stderr, "Killed 0x%X\n", tid); } static define wait_for_message () { variable bufid = pvm_recv (-1, -1); variable msgid, tid; (,msgid,tid) = pvm_bufinfo(bufid); switch (msgid) % { % case TASK_STRING_MSG: % handle_task_string (msgid, tid); % } { case TASK_COMPLETE_MSG: handle_task_complete (msgid, tid); } { case TASK_STDOUT_MSG: handle_task_stdout (msgid, tid); } { case TASK_EXIT_MSG: handle_task_exit (msgid, tid); } { case HOST_DELETE_MSG: handle_host_delete (msgid, tid); } { case HOST_ADD_MSG: handle_host_add (msgid, tid); } { case TASK_STATUS_MSG: handle_task_status (msgid, tid); } { case TASK_KILL_MSG: handle_task_kill (msgid, tid); } { if (Message_Callback_Hook != NULL) { if ((@Message_Callback_Hook) (msgid, tid)) return; } () = fprintf (stderr, "*** WARNING: unexpected message tag: %d\n", msgid); } } %}}} static define spawn_slave (slave, host) %{{{ { variable argv = slave.argv; variable slave_tid = pvm_spawn (argv, PvmTaskHost, host.hostname, 1); if (slave_tid < 0) { if (slave_tid == PvmNoFile) { () = fprintf (stderr, "Unable to run %s on %S: not found\n", argv[0], host.hostname); } () = fprintf (stderr, "Unable to run %s on %S, error=%d: not found\n", argv[0], host.hostname, slave_tid); delete_host (host); return -1; } pvm_notify (PvmHostDelete, HOST_DELETE_MSG, slave_tid); pvm_notify (PvmTaskExit, TASK_EXIT_MSG, slave_tid); slave.host = host; slave.slave_tid = slave_tid; slave.status = SLAVE_RUNNING; host.nprocesses += 1; host.ptid = pvm_tidtohost (slave_tid); if (Slave_Spawned_Callback_Hook != NULL) (@Slave_Spawned_Callback_Hook) (slave_tid, host.hostname, argv); if (Debug) vmessage ("task %d spawned on %s", slave_tid, host.hostname); return 0; } %}}} public define pvm_ms_set_message_callback (fun) { Message_Callback_Hook = fun; } public define pvm_ms_set_slave_spawned_callback (fun) { Slave_Spawned_Callback_Hook = fun; } public define pvm_ms_set_slave_exit_failed_callback (fun) { Slave_Exit_Failed_Callback_Hook = fun; } public define pvm_ms_set_idle_host_callback (fun) { Idle_Host_Callback_Hook = fun; } public define pvm_ms_set_hosts () { if (_NARGS == 0) usage ("pvm_ms_set_hosts (hosts, ...)"); variable hosts = __pop_args (_NARGS); Hosts = [__push_args (hosts)]; } static define build_master_exit_status (pgms) { variable n = Slave_Index; variable s = Struct_Type[n]; variable c = Slave_List; while (c != NULL) { variable ss = struct { exit_status, stdout, host }; ss.exit_status = c.exit_status; ss.stdout = c.stdout; if (c.host != NULL) ss.host = c.host.hostname; s[c.index] = ss; c = c.next; } return s; } public define pvm_ms_run_master (pgms) { if (Host_List == NULL) create_host_list (); create_slave_list (pgms); variable master_tid = pvm_mytid (); vmessage ("my pid = %d", master_tid); pvm_export ("SLANG_MODULE_PATH"); () = pvm_setopt (PvmOutputTid, master_tid); () = pvm_setopt (PvmOutputCode, TASK_STDOUT_MSG); pvm_notify (PvmHostAdd, HOST_ADD_MSG, -1); while (NULL != (next_slave (SLAVE_NOTRUN | SLAVE_RUNNING))) { forever { variable slave = next_slave (SLAVE_NOTRUN); if (slave == NULL) break; variable host = next_host (); if (host == NULL) break; if (0 == spawn_slave (slave, host)) sleep (0.0); } wait_for_message (); } return build_master_exit_status (pgms); } public define pvm_ms_slave_exit (exit_status) { variable parent_tid = pvm_parent(); pvm_psend (parent_tid, TASK_COMPLETE_MSG, exit_status); pvm_exit (); } public define pvm_ms_run_slave (argv) { variable mytid = pvm_mytid(); variable pgm = strjoin (argv, " "); pvm_sigterm_enable (1); variable exit_status = system (sprintf ("(%s) 2>&1", pgm)); pvm_ms_slave_exit (exit_status); exit (exit_status); } public define pvm_ms_set_debug (debug) { Debug = debug; } public define pvm_ms_set_num_processes_per_host (num_processes) { if (num_processes < 0) { vmessage ("*** pvm_ms_set_num_processes_per_host: invalid value: num_processes = %S", num_processes); return; } if (Host_List == NULL) create_host_list (); Default_Max_Processes_Per_Host = num_processes; foreach (Host_List) using ("next") { variable h = (); h.max_processes = num_processes; } } public define pvm_ms_set_host_max_processes (hostname, max_processes) { if (max_processes < 0) { vmessage ("*** pvm_ms_set_host_max_processes: invalid value: max_processes = %S", max_processes); return; } if (Host_List == NULL) create_host_list (); foreach (Host_List) using ("next") { variable h = (); if (h.hostname == hostname) { h.max_processes = max_processes; return; } } } public define pvm_ms_kill (mpid, spid) { pvm_psend (mpid, TASK_COMPLETE_MSG, spid); } provide ("pvm_ms"); ��������������������������������������������������������������������������������������������������������pvm-0.1.5/src/version.h�����������������������������������������������������������������������������0000644�0026061�0026061�00000000771�10330414022�015206� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define MODULE_MAJOR_VERSION 0 #define MODULE_MINOR_VERSION 1 #define MODULE_PATCH_LEVEL 5 #define STRINGIZE(a) #a #define MAKE_VERSION_STRING(a,b,c) STRINGIZE(a) "." STRINGIZE(b) "." STRINGIZE(c) static char *Module_Version_String = \ MAKE_VERSION_STRING(MODULE_MAJOR_VERSION,MODULE_MINOR_VERSION,MODULE_PATCH_LEVEL); #define MAKE_VERSION(a,b,c) ((a)*10000 + (b)*100 + c) #define MODULE_VERSION_NUMBER \ MAKE_VERSION(MODULE_MAJOR_VERSION,MODULE_MINOR_VERSION,MODULE_PATCH_LEVEL) �������pvm-0.1.5/src/xpvm.sl�������������������������������������������������������������������������������0000644�0026061�0026061�00000002313�07753241225�014716� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������require ("pvm"); static define _xpvm_init_trace () { variable xpvm_tid; xpvm_tid = pvm_gettid ("xpvm", 0); if (xpvm_tid <= 0) { vmessage ("XPVM not running, cannot trace"); return; } % set self trace and output destinations and message codes pvm_setopt (PvmSelfTraceTid, xpvm_tid); pvm_setopt (PvmSelfTraceCode, 666); pvm_setopt (PvmSelfOutputTid, xpvm_tid); pvm_setopt (PvmSelfOutputCode, 667); % set future children's trace and output destinations and codes pvm_setopt (PvmTraceTid, xpvm_tid); pvm_setopt (PvmTraceCode, 666); pvm_setopt (PvmOutputTid, xpvm_tid); pvm_setopt (PvmOutputCode, 667); % generate default trace mask variable trace_mask = Pvmtmask_Type; pvm_tev_mask_init (trace_mask); pvm_tev_mask_set (trace_mask, TEV_MCAST); pvm_tev_mask_set (trace_mask, TEV_SEND); pvm_tev_mask_set (trace_mask, TEV_RECV); pvm_tev_mask_set (trace_mask, TEV_NRECV); % set self trace mask pvm_settmask (PvmTaskSelf, trace_mask); % set future children's trace mask pvm_settmask (PvmTaskChild, trace_mask); } public define xpvm_setup () { ERROR_BLOCK { _clear_error(); return; } _xpvm_init_trace (); } provide ("xpvm"); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/tools/������������������������������������������������������������������������������������0000755�0026061�0026061�00000000000�10330414266�013726� 5����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/tools/README������������������������������������������������������������������������������0000644�0026061�0026061�00000001404�07753241224�014614� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������The programs in this directory may or may not be useful to you. In find them useful alternatives to the use of the "pvm" program itself. They were also useful for testing the module. pvmconfig: Show the host configuration of the virtual machine. Similar to the pvm "conf" command. pvmkill: Should be used only for master/slave processes created using the routines in pvm_ms.sl. This kills a specified master and all slaves associated with it. pvmstatus: Should be used only for master/slave processes created using the routines in pvm_ms.sl. This shows the status of the currently executing slave processes and the stdout of each process. pvmtasks Shows the currently executing tasks on the PVM. Similar to the pvm "ps -a" command. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/tools/pvmconfig���������������������������������������������������������������������������0000755�0026061�0026061�00000001062�07753241224�015652� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env slsh import ("pvm"); define show_config() { variable s = pvm_config (); variable num = length (s.hi_name); variable i; () = fprintf (stdout, "%d hosts, %d data format(s)\n", num, s.narch); variable fmt = "%25s 0x%06X %10s %8d 0x%08X\n"; () = fprintf (stdout, "%21sHOST DTID ARCH SPEED DSIG\n", " "); _for (0, length (s.hi_name)-1, 1) { i = (); () = fprintf (stdout, fmt, s.hi_name[i], s.hi_tid[i], s.hi_arch[i], s.hi_speed[i], s.hi_dsig[i]); } } show_config (); pvm_exit (); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/tools/pvmkill�����������������������������������������������������������������������������0000755�0026061�0026061�00000000345�07753241224�015343� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env slsh require ("pvm_ms"); if (__argc != 3) { () = fprintf (stderr, "Usage: %s MASTER-TID SLAVE-TID\n", __argv[0]); exit (1); } pvm_ms_kill (integer (__argv[1]), integer (__argv[2])); pvm_exit (); exit (0); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/tools/pvmstatus���������������������������������������������������������������������������0000755�0026061�0026061�00000001134�07753241224�015730� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env slsh import ("pvm"); static variable TASK_STATUS_MSG = 1005; define show_status (tid) { variable my_tid = pvm_mytid (); variable s = pvm_tasks (tid); if (s == NULL) { () = fprintf (stderr, "Task with tid=%d does not appear to exist\n", tid); exit (1); } pvm_initsend (PvmDataDefault); pvm_send (tid, TASK_STATUS_MSG); () = pvm_recv (-1, TASK_STATUS_MSG); message (pvm_unpack (String_Type)); } if (__argc == 1) { () = fprintf (stderr, "Usage: %s MASTER-TID\n", __argv[0]); exit (1); } show_status (integer (__argv[1])); pvm_exit (); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pvm-0.1.5/tools/pvmtasks����������������������������������������������������������������������������0000755�0026061�0026061�00000001016�07753241224�015531� 0����������������������������������������������������������������������������������������������������ustar �houck���������������������������houck���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env slsh import ("pvm"); define show_tasks (what) { variable s = pvm_tasks (what); variable h = pvm_config (); variable i; vmessage ("%21sHOST TID FLAG COMMAND", " "); _for (0, length (s.ti_tid)-1, 1) { i = (); variable host = "??"; variable j = where (s.ti_host[i] == h.hi_tid); if (length (j)) host = h.hi_name[j[0]]; vmessage ("%25s 0x%06X %4d %s", host, s.ti_tid[i], s.ti_flag[i], s.ti_a_out[i]); } } show_tasks (0); pvm_exit (); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������