Mon Nov 23 16:03:13 EST 1992
From owner-mpi-lang@CS.UTK.EDU  Wed Dec 23 06:11:46 1992
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA08579; Wed, 23 Dec 92 06:11:46 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA10302; Wed, 23 Dec 92 06:11:35 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 23 Dec 1992 11:11:34 GMT
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from marge.meiko.com by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA10294; Wed, 23 Dec 92 06:11:30 -0500
Received: from hub.meiko.co.uk by marge.meiko.com with SMTP id AA03680
  (5.65c/IDA-1.4.4 for <mpi-lang@cs.utk.edu>); Wed, 23 Dec 1992 06:11:26 -0500
Received: from float.co.uk (float.meiko.co.uk) by hub.meiko.co.uk (4.1/SMI-4.1)
	id AA22108; Wed, 23 Dec 92 11:11:20 GMT
Date: Wed, 23 Dec 92 11:11:20 GMT
From: jim@meiko.co.uk (James Cownie)
Message-Id: <9212231111.AA22108@hub.meiko.co.uk>
Received: by float.co.uk (5.0/SMI-SVR4)
	id AA01691; Wed, 23 Dec 92 11:11:09 GMT
To: mpi-lang@cs.utk.edu
Cc: jim@meiko.co.uk
Subject: the mode argument
Content-Length: 4763

People,

Apologies if this issue has already been addressed. I am working from
the Supercomputer draft (ORNL/TM-12231 October 1992). Since there
appears to have been no mail in the language binding sub-group I
assume that that area remains the same.

Use of character strings for mode.
==================================

The mode argument to the communication routines is described
throughout the draft as a character string. I believe this is a BAD
IDEA for the following reasons (in no particular priority order) :-

Arguments against using strings
===============================
1) Passing strings will produce slower code
2) Passing strings will produce larger code
3) Passing strings makes a portable implementation more difficult
   because there is no standard way of passing strings from Fortran to
   C.
   

1) Code is slower.
The library routine must determine what the actual mode is. If the
mode argument is a string this should be implemented as a string
compare. This will normally require a function call (and probably more
than one), since the code will be something like
     char * mode;

     if (strcmp(mode,"blocking") == STRINGEQUAL)
     {}
     else if (strcmp(mode,"nonblocking") == STRINGEQUAL)
     {}
     else if (strcmp(mode,"synchronous") == STRINGEQUAL)
     {}
     else
         error(...)

This is hugely slower than
     int mode;

     switch (mode)
     {
         case MPI_BLOCKING:
	 	 	 
	 case MPI_NONBLOCKING:
	 
	 case MPI_SYNCHRONOUS:

	 default:
     }	 

On a RISCy machine, even unpleasant code like

     char * mode;

     switch(*mode)
     {
         case 'b': /* Assume blocking     */
	 case 'n': /* Assume non-blocking */
	 case 's': /* Assume synchronous  */
     }

will be slower than the integer case above since loading the address
of a string to pass it normally takes two instructions, while loading
a small integer constant takes one. Also there's an extra store access
to pick up the first byte of the string (almost certainly from an area
which won't be in the cache), whereas the switch on the integer value
will already have the value in a register.


2) Code is larger.
Just because of all the extra strings which will be placed in the data
segment.

3) A portable implementation is harder.
A natural way to implement the library is to implement it in C, and
then provide a Fortran binding. This is made harder when strings are
passed as arguments, since the Fortran and C string conventions are
entirely different. In the general case this requires that the whole
string be copied when calling a C routine from Fortran and passing a
string as an argument. This will have a bad effect on latency.

Arguments for using strings
===========================

1) User code is easier to understand
2) Additional possibilities are easier to add
3) There is no standard way of including PARAMETER definitions in
   Fortran 77.

1) User code is easier to understand
IMHO 
     MPI_RECV ( MPI_BLOCKING, ...);
is just as easy to understand as
     MPI_RECV ( "blocking", ...);

though I agree that
     MPI_RECV ( 0 , ...);
is extremely opaque.

The solution to this is NOT to define the actual values which are used
to represent the various tokens, but rather to specify only symbolic
names and the include file name. Portable programs must not then make
assumptions about the actual values used.

In ANSI C it would actually be possible to define the modes as an
enumeration type. In conjunction with appropriate prototype
definitions for the library functions this should cause type warnings
on usage like the last example. (Since the 0 is implicitly an int,
rather than an enum mpi_mode)       

2) Additional possibilities are easier to add
It is true that strings allow vendor options to be more securely added
(e.g. "meiko_fastsend") but 
      1) do we want to permit such things ?
	 Any programs which use these features will be neither
	 conformant nor portable. (Though of course we can't stop them).
      2) we have (at least) 2**32 possible modes anyway. If we reserve
         0 <= mode <= 256 for standard sepcified use, and allow other
	 people to choose RANDOM other numbers, the chances of
	 collision are extremely low. (Of course we could recommend 
	 the dollar bill solution, which generates large guaranteed 
	 unique numbers at the cost of $1 for each number).

3) There is no standard way of including PARAMETER definitions in
   Fortran 77.
This is true and a pain. However Fortran 90 provides modules which
overcome this. I don't think this is a sufficiently strong argument

Thoughts ?
Feedback ?
Flames   ?

-- Jim
James Cownie 
Meiko Limited
650 Aztec West
Bristol BS12 4SD
England

Phone : +44 454 616171
FAX   : +44 454 618188
E-Mail: jim@meiko.co.uk or jim@meiko.com


From owner-mpi-lang@CS.UTK.EDU  Mon Jan  4 09:32:49 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA19838; Mon, 4 Jan 93 09:32:49 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA09250; Mon, 4 Jan 93 09:32:41 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Mon, 04 Jan 1993 14:32:40 GMT
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from marge.meiko.com by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA09242; Mon, 4 Jan 93 09:32:36 -0500
Received: from hub.meiko.co.uk by marge.meiko.com with SMTP id AA07241
  (5.65c/IDA-1.4.4); Mon, 4 Jan 1993 09:32:32 -0500
Received: from float.co.uk (float.meiko.co.uk) by hub.meiko.co.uk (4.1/SMI-4.1)
	id AA15874; Mon, 4 Jan 93 14:32:28 GMT
Date: Mon, 4 Jan 93 14:32:28 GMT
From: jim@meiko.co.uk (James Cownie)
Message-Id: <9301041432.AA15874@hub.meiko.co.uk>
Received: by float.co.uk (5.0/SMI-SVR4)
	id AA02690; Mon, 4 Jan 93 14:31:52 GMT
To: mpi-pt2pt@cs.utk.edu, mpi-lang@cs.utk.edu
Subject: Profilers etc.
Content-Length: 2528

Gentlepeople,

I have an implementation issue which I would like to raise in the MPI
forum, since it is unclear where it fits into the sub-committee
structure I have mailed to both mpi-pt2pt and mpi-lang. Apologies to
those of you who receive this message twice.

Issue
=====
The major objective of MPI1 is to achieve portability of applications.
This has major benefits for us all (not least in legitimising and
therefore growing the MPP marketplace). 

One of the benefits which it would also be nice to achieve would be
the wide availability of different tools which support programming in
the MPI1 model. The most immediately obvious such tools (to me at
least !) are

1) HPF to Fortran + MPI1 translators
2) Performance monitoring/tuning tools
3) Debuggers

Support for the first is easy (since it just requires what we're
already doing). 

Portable support for the second is not so trivial, since the
collection of useful performance information is much more intrusive.

Portable support for the third is harder still, and I won't discuss it
further. 

Options
=======
We have various possible options which we can take.

1) Ignore the problem
   Provide no support for portable performance monitoring tools, and
   leave each tool provider with a large porting problem.

   I don't like this solution, it loses some of the benefit of the
   standard, which should be attracting people to build tools.

2) Document specific implementation hooks as part of MPI1. 
   In effect these would be callbacks from the library to profiling
   code which could then do whatever it liked.

3) As 2, but without REQUIRING that a conforming implementation
   provide the functions. They're there as a recommendation, rather
   than being mandatory. 


I think we should be concerned about this, and I'd like us at least to
make some recommendation. Personally I'd probably implement two
separate interface to the library, one of which provided the hooks,
and the other of which didn't so that you don't pay the cost of
checking the profiling hooks unless you asked to.

Of course even if we do nothing it's not too hard to escape (using
horrible macros) in C, but Fortran doesn't always have macros, so a
properly specified internal solution is definitely preferable.

Thoughts ???
Flame me at Dallas. I'm travelling tomorrow. When are we having a
meeting in Europe ???

-- Jim
James Cownie 
Meiko Limited
650 Aztec West
Bristol BS12 4SD
England

Phone : +44 454 616171
FAX   : +44 454 618188
E-Mail: jim@meiko.co.uk or jim@meiko.com

From owner-mpi-lang@CS.UTK.EDU  Wed Feb  3 11:48:30 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA16901; Wed, 3 Feb 93 11:48:30 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA07042; Wed, 3 Feb 93 11:48:05 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 3 Feb 1993 11:48:04 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from NA-GW.CS.YALE.EDU by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA07034; Wed, 3 Feb 93 11:48:03 -0500
Received: from YOGI.NA.CS.YALE.EDU by CASPER.NA.CS.YALE.EDU via SMTP; Wed, 3 Feb 1993 11:47:59 -0500
Received: by YOGI.NA.CS.YALE.EDU (Sendmail-5.65c/res.client.cf-3.5)
	id AA00312; Wed, 3 Feb 1993 11:47:56 -0500
Date: Wed, 3 Feb 1993 11:47:56 -0500
From: berryman-harry@CS.YALE.EDU (Harry Berryman)
Message-Id: <199302031647.AA00312@YOGI.NA.CS.YALE.EDU>
To: mpi-lang@cs.utk.edu
Subject: Stirring up trouble


Ladies and Gentlemen,

This committee has been (appropriately) quiet the last several months.
It is, however, time to make some noise. I submit the following not 
for your approval, but to stimulate the discussion. I will be disappointed 
if much of what I propose lives as long as the committee draft proposal. 

Although the comments pertain to C and F77, we might also consider 
other languages such as C++, Fortran 90, Ada, and ML.

-----------------------------------------------------------------------------

This committee exists to insure that the design of MPI is consistent with 
the standards of the target languages (Fortran 77 and ANSI-C), and that the 
two interfaces are consistent with each other. I view our role to be 
the "Style Police" of the MPI committee. It is therefore appropriate to 
suggest to the committee a list of pitfalls to avoid.

1) Strings have no place in the parameter lists of MPI calls. 
The internal representation of strings is different in F77 and C. Using 
strings in the interface can only cause trouble. 

2) The availability of macros in Fortran cannot be assumed. 
Although most Fortran compilers allow the use of cpp, the Fortran 77 
standard does not require this. (Some of the functionality of macros
can be had by using "parameters" in F77, but this only allows the binding
of constants to symbols.)

3) As much as possible, the MPI names should be the same in both F77 and C.

4) Identifiers (e.g., function names) must be valid both in C and F77.
Fortran is far more restrictive on this than C is. The F77 standard 
dictates that variables, function names, and subroutine names, be 
distinct in the first six characters. 

5) Using integers in Fortran as handles to keep track of structures
   and pointers to structures is consistent with common F77 programming style
   and the F77 standard. 


Any Other No-Nos for the committee as a whole?


-scott berryman 
Chair, Language Binding 

Yale University Computer Science Department
and
NASA Langley Research Center
From owner-mpi-lang@CS.UTK.EDU  Wed Feb  3 12:00:25 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA17440; Wed, 3 Feb 93 12:00:25 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA07728; Wed, 3 Feb 93 12:00:11 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 3 Feb 1993 12:00:10 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from marge.meiko.com by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA07710; Wed, 3 Feb 93 12:00:05 -0500
Received: from hub.meiko.co.uk by marge.meiko.com with SMTP id AA18122
  (5.65c/IDA-1.4.4 for <mpi-lang@cs.utk.edu>); Wed, 3 Feb 1993 12:00:00 -0500
Received: from float.co.uk (float.meiko.co.uk) by hub.meiko.co.uk (4.1/SMI-4.1)
	id AA28075; Wed, 3 Feb 93 16:59:49 GMT
Date: Wed, 3 Feb 93 16:59:48 GMT
From: jim@meiko.co.uk (James Cownie)
Message-Id: <9302031659.AA28075@hub.meiko.co.uk>
Received: by float.co.uk (5.0/SMI-SVR4)
	id AA03458; Wed, 3 Feb 93 16:58:10 GMT
To: berryman-harry@CS.YALE.EDU
Cc: mpi-lang@cs.utk.edu
In-Reply-To: Harry Berryman's message of Wed, 3 Feb 1993 11:47:56 -0500 <199302031647.AA00312@YOGI.NA.CS.YALE.EDU>
Subject: Stirring up trouble
Content-Length: 946

> Any Other No-Nos for the committee as a whole?

6) The underscore character (`_') is NOT included in the FORTRAN 77
   character set.

7) In a standard conforming FORTRAN 77 program a subprogram only ever
   has one type signature for its arguments.

We should also concern ourselves somewhat with Fortran 90. A 
FORTRAN 77 binding (though compatible with Fortran 90) is NOT what is
really required for a Fortran 90 binding. In particular Fortran 90
allows various options which may be useful (optional arguments, named
arguments), and provides whole new areas of complexity (POINTERs,
structures etc.) which will not have been addressed by the FORTRAN 77
binding. 

-- Jim
James Cownie 
Meiko Limited			Meiko Inc.
650 Aztec West			Reservoir Place
Bristol BS12 4SD		1601 Trapelo Road
England				Waltham
				MA 02154

Phone : +44 454 616171		+1 617 890 7676
FAX   : +44 454 618188		+1 617 890 5042
E-Mail: jim@meiko.co.uk   or    jim@meiko.com

From owner-mpi-lang@CS.UTK.EDU  Wed Feb  3 14:28:49 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA21025; Wed, 3 Feb 93 14:28:49 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA14904; Wed, 3 Feb 93 14:28:29 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 3 Feb 1993 14:28:27 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from NA-GW.CS.YALE.EDU by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA14896; Wed, 3 Feb 93 14:28:26 -0500
Received: from YOGI.NA.CS.YALE.EDU by CASPER.NA.CS.YALE.EDU via SMTP; Wed, 3 Feb 1993 14:28:24 -0500
Received: by YOGI.NA.CS.YALE.EDU (Sendmail-5.65c/res.client.cf-3.5)
	id AA00671; Wed, 3 Feb 1993 14:28:23 -0500
Date: Wed, 3 Feb 1993 14:28:23 -0500
From: berryman-harry@CS.YALE.EDU (Harry Berryman)
Message-Id: <199302031928.AA00671@YOGI.NA.CS.YALE.EDU>
To: mpi-lang@cs.utk.edu
Subject: Optional arguments

I'm of the opinion that optional arguments should be discounted because 
F77 doesn't support them, and we want all of the interfaces to be as
much alike as possible. 

Unfortunately, making the interface consistent with F77 and C is pretty 
restrictive. Do we want to keep this as a general principle?

-scott berryman
chairthing
From owner-mpi-lang@CS.UTK.EDU  Wed Feb  3 15:12:38 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA22300; Wed, 3 Feb 93 15:12:38 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA17335; Wed, 3 Feb 93 15:12:21 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 3 Feb 1993 15:12:20 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from timbuk.cray.com by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA17327; Wed, 3 Feb 93 15:12:18 -0500
Received: from teak18.cray.com by cray.com (4.1/CRI-MX 2.10)
	id AA03650; Wed, 3 Feb 93 14:12:15 CST
Received: by teak18.cray.com
	id AA05975; 4.1/CRI-5.6; Wed, 3 Feb 93 14:12:10 CST
From: par@teak.cray.com (Peter Rigsbee)
Message-Id: <9302032012.AA05975@teak18.cray.com>
Subject: Re:  Optional arguments
To: mpi-lang@cs.utk.edu
Date: Wed, 3 Feb 93 14:12:05 CST
X-Mailer: ELM [version 2.3 PL11b-CRI]

Scott Berryman writes:
> 
> Unfortunately, making the interface consistent with F77 and C is pretty 
> restrictive. Do we want to keep this as a general principle?
> 

It seems to me that most of the restrictions seem to effect the F77
interfaces.  C seems pretty flexible, especially with "void *" in ANSI
C.  (I don't have your other mail messages right at hand, so don't remember 
specifics.)

Adhering to the F77 standard has its advantages, not the least of which
is that it is easy to define and you can make a good argument for.
Unfortunately, I think this will have us end up with the same kinds of
cryptic function names that are found in other portable libraries.  And
if we do end up with lots of subtle variations on send and receive, trying
to remember the difference between SNPAHP and SNPHAP (choosing two strings
at random ;-) will get pretty difficult.

Pragmatically, though, it is my sense that most of the Fortran 77 compilers
available on the market, especially on newer systems, have gone beyond the
standard in a number of areas (especially names).  Given the competitive 
pressures to compile existing code, I think it would be hard for a hardware 
or software vendor today to offer, for example, a Fortran compiler that 
restricted function names to the 6 character limit.

So I think it would be more useful if we were to propose, at least for 
Fortran 77, interfaces that matched this more realistic "standard".  Restrict 
things where true portability will differ, not just where the formal standard 
is limiting.  Another way to look at this is that if the interfaces must
adhere to the lowest common denominator, then we should define this based
on the set of likely target systems, and not simply on the standard.  Then 
let people (members of the MPI group, people who review the spec, etc.) come 
back with specific arguments about where and why particular aspects are in 
fact non-portable.

Some areas where, as a user, I see restrictions as being unnecessary might 
include:
	- maximum length of name (32? 16?)
	- use of underscores in name
	- an argument can only be of one type

I think the net result would be an interface that would be more easily
understood and more usable.

	- Peter Rigsbee
From owner-mpi-lang@CS.UTK.EDU  Mon Feb  8 14:14:34 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA04248; Mon, 8 Feb 93 14:14:34 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA08480; Mon, 8 Feb 93 14:14:21 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Mon, 8 Feb 1993 14:14:20 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from NA-GW.CS.YALE.EDU by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA08472; Mon, 8 Feb 93 14:14:18 -0500
Received: from YOGI.NA.CS.YALE.EDU by CASPER.NA.CS.YALE.EDU via SMTP; Mon, 8 Feb 1993 14:14:15 -0500
Received: by YOGI.NA.CS.YALE.EDU (Sendmail-5.65c/res.client.cf-3.5)
	id AA11866; Mon, 8 Feb 1993 14:14:12 -0500
Date: Mon, 8 Feb 1993 14:14:12 -0500
From: berryman-harry@CS.YALE.EDU (Harry Berryman)
Message-Id: <199302081914.AA11866@YOGI.NA.CS.YALE.EDU>
To: mpi-lang@CS.UTK.EDU
Subject: Why not both?


I also tend to chaff under the restriction of the F77 variable name
requirements. But, on the other hand, I'd hate to have everyone hate
use for not being consistent with the standard. (BTW the ANSI C standard
is 32 chars, counting an implied leading underscore.) Perhaps a compromise
would be to have the standard written in terms of a 31 char limit, but
supply another interface which was consistent with the F77 standard, but
functionally equivelent. Obviously this would double the number of routines 
in the standard.

-scott
From owner-mpi-lang@CS.UTK.EDU  Mon Feb  8 14:40:36 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA04760; Mon, 8 Feb 93 14:40:36 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA09906; Mon, 8 Feb 93 14:40:26 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Mon, 8 Feb 1993 14:40:25 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from ssdintel.ssd.intel.com by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA09887; Mon, 8 Feb 93 14:40:22 -0500
Received: from tualatin.SSD.intel.com by SSD.intel.com (4.1/SMI-4.1)
	id AA05139; Mon, 8 Feb 93 11:40:15 PST
Date: Mon, 8 Feb 93 11:40:15 PST
Message-Id: <9302081940.AA05139@SSD.intel.com>
Received: by tualatin.SSD.intel.com (4.1/SMI-4.0)
	id AA00559; Mon, 8 Feb 93 11:39:51 PST
From: Bob Knighten <knighten@SSD.intel.com>
Sender: knighten@SSD.intel.com
To: berryman-harry@CS.YALE.EDU
Cc: mpi-lang@CS.UTK.EDU
Subject: Re: Why not both?
In-Reply-To: <199302081914.AA11866@YOGI.NA.CS.YALE.EDU>
References: <199302081914.AA11866@YOGI.NA.CS.YALE.EDU>
Reply-To: knighten@SSD.intel.com (Bob Knighten)

The one place where the P1003.9 standard (POSIX FORTRAN 77 Language Interfaces
- Part 1: Binding for System API) which specifies a F77 binding to the POSIX
system interfaces violates the FORTRAN 77 standard is in name length.  There
was no significant opposition because of this.

-- Bob

Robert L. Knighten	             | knighten@ssd.intel.com
Intel Supercomputer Systems Division | 
15201 N.W. Greenbrier Pkwy.	     | (503) 629-4315
Beaverton, Oregon  97006	     | (503) 629-9147 [FAX]
From owner-mpi-lang@CS.UTK.EDU  Wed Feb 10 16:46:22 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA04990; Wed, 10 Feb 93 16:46:22 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA24116; Wed, 10 Feb 93 16:46:04 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 10 Feb 1993 16:46:03 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from ssdintel.ssd.intel.com by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA24080; Wed, 10 Feb 93 16:45:38 -0500
Received: from tualatin.SSD.intel.com by SSD.intel.com (4.1/SMI-4.1)
	id AA14891; Wed, 10 Feb 93 13:45:36 PST
Date: Wed, 10 Feb 93 13:45:36 PST
Message-Id: <9302102145.AA14891@SSD.intel.com>
Received: by tualatin.SSD.intel.com (4.1/SMI-4.0)
	id AA03909; Wed, 10 Feb 93 13:45:33 PST
From: Bob Knighten <knighten@SSD.intel.com>
Sender: knighten@SSD.intel.com
To: mpi-formal@cs.utk.edu, mpi-lang@cs.utk.edu
Subject: POSIX LIS
Reply-To: knighten@SSD.intel.com (Bob Knighten)

As part of the POSIX work a "Draft TCOS-SSC Technical Report -- Programming
Language Independent Specification Methods" was written.  This  has served as
the basis for the language independent specification of the various system
interfaces that have been developed.  This is *NOT* a formal specification
method, but has as its purpose "to assist and coordinate the development of
functional specifications and language bindings by defining an abstract
model, and providing guidelines for the use of that model in the
development of new functional specifications, the dirivation of a base
standard from an existing language binding, and the development of new
language bindings to a functional specification."

"The model is primarily intended for use in developing language-independent
specifications for operating system and related services, and language
bindings for procedural programming languages."

[The quotation is from the Scope and Purpose of the report.]

This guide was never completely finished and Paul Rabin (OSF), the
principal author, recommends that it be used in conjunction with the
P1003.1LIS which provides a very large example.

Paul Rabin expects that some extensions to the current guide will be
necessary for MPI, just as extensions will be necessary for the POSIX
Real-Time and Threads work.  He is interested in working with us to develop
common extensions.

I can provide copies of the POSIX LIS and both the P1003.1 LIS and the
P1003.16 C binding to the P1003.1 LIS as well.  [P1003.1LIS is about 380
pages and P1003.16 is about 300 pages so I don't want to drop these books
on people unless they are actually desired.]

A formal specification of MPI is quite desirable, but I am doubtful that we
can achieve it in the time we have available.  A language independent
specification of the sort developed within POSIX is, I believe, essential
to provide the common base for all of the language bindings we wish to
provide.  

-- Bob

Robert L. Knighten	             | knighten@ssd.intel.com
Intel Supercomputer Systems Division | 
15201 N.W. Greenbrier Pkwy.	     | (503) 629-4315
Beaverton, Oregon  97006	     | (503) 629-9147 [FAX]
From owner-mpi-lang@CS.UTK.EDU  Fri Apr  9 13:02:00 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA00637; Fri, 9 Apr 93 13:02:00 -0400
Received: from localhost by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA28148; Fri, 9 Apr 93 13:01:47 -0400
X-Resent-To: mpi-lang@CS.UTK.EDU ; Fri, 9 Apr 1993 13:01:45 EDT
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from ocfmail.ocf.llnl.gov by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA28093; Fri, 9 Apr 93 13:00:56 -0400
Received: by ocfmail.ocf.llnl.gov (4.1/SMI-4.0)
	id AA25915; Fri, 9 Apr 93 10:00:54 PDT
Date: Fri, 9 Apr 93 10:00:54 PDT
From: nessett@ocfmail.ocf.llnl.gov (Danny Nessett)
Message-Id: <9304091700.AA25915@ocfmail.ocf.llnl.gov>
To: mpi-lang@cs.utk.edu, mpi-pt2pt@cs.utk.edu
Subject: cross-language support - a proposal (long)
Cc: nessett@ocfmail.ocf.llnl.gov


I am cross posting this message to the point-to-point list, since it contains
a proposed modification to the point-to-point proposal. Those interested in
point-to-point, but not language binding issues should skip to section 3,
and evaluate whether the changes are acceptable.

1. The Problem
--------------

At the recent MPI meeting in Dallas (31 March - 2 April), the language binding
subcommittee proposed that the MPI standard make no provision for
interoperability between MPI-based programs written in different programming
languages. I objected to that suggestion and volunteered to develop a proposal
that would allow such language interoperability. My objections were and are
based on the following considerations :

  o  MPI is a mulit-use standard, being developed for homogeneous multi-
     processors, homogeneous computer clusters and heterogeneous distributed
     systems. The objective is to provide a message passing interface that
     can be used in all of these environments. In addition, there is an
     objective to promote portability of MPI-based codes from one environment
     to another.

     Correct operation of MPI-based codes in a heterogeneous environment
     requires the MPI implementation to accommodate different formats
     for the communicated data. As a side effect, programs written in
     different programming languages will interoperate as long as the data
     types are conceptually the same. For example, REALs in Fortran and
     floats in C are conceptually the same. Unless there is a requirement
     that MPI support cross-language interoperability, some programs will
     work in heterogeneous environments, but not work in homogeneous
     environments. This will give the appearance that MPI is poorly designed.

  o  MPI can be used in at least two different ways. It can be used for
     intercommunication between application executables that are aware
     (from the programmer's point of view) of each other's internal data
     structures and algorithms. It can also be used to provide services,
     much like a library provides services, in which the internal data
     structures and algorithms are not visible to the service client.
     In this second class of use, MPI acts as a generic service interface,
     supporting a wide variety of applications. Commonly, this generic service
     interface is known as client/server.

     Traditionally, libraries define their interface data structures and
     procedure prototypes in a specific programming language. Some libraries
     provide multiple interface definitions, one for each particular
     programming language they support. However, when using a generic
     service interface to access what is the equivalent of library services,
     this approach becomes problematic. The MPI interface is itself specified
     in terms of one or more programming language bindings. There is no
     useful way to specify another language binding for the client/server
     interface.

     Consequently, another approach is used for the client/server interface,
     which is programming language independent. Generally, server writers
     specify an interface in terms of a message parameter that represents
     the function or procedure to execute and in conjunction with a particular
     value of that parameter, specify a set of parameters that are the
     function's or procedure's arguments. Note that with a message passing
     based generic service interface, such as MPI (as opposed to a remote
     procedure call generic service interface), the service call is not
     constrained to obey function or procedure semantics, since the client is
     not obliged to block while the server provides the service. However,
     that is an aside.

     Since the server's interface is specified in terms of MPI data types,
     rather than in terms of the data types of the programming language used
     to write the server, there is a complete decoupling of the programming
     language used to write a server from the programming language used to
     write the client (and vice versa). The server can use one MPI language
     binding to offer service and the client can use another MPI language
     binding to access those services.

     An example may clarify this somewhat. Suppose I wish to write a server
     that provides a matrix manipulation service. I define my interface as
     follows :

       first parameter : operation to be performed (integer) -

			1 = matrix sum

			2 = matrix multiply

			3 = matrix inversion

			4 = matrix transposition

			5 = return result

       second parameter: number of rows (integer) in matrix
                         (or matrices)

       third parameter : number of columns (integer) in matrix
                         (or matrices)

       fourth parameter: first matrix for all operations (single precision
			  real array, row major order)

       fifth parameter : second matrix for operations 1 and 2 (single
			  precision real array, row major order)

     For this interface, the operation and parameters will be specified as
     MPI data types. For a C or C++ language binding of MPI, these data types
     will be "int" and "float". For a Fortran language binding of MPI, these
     data types will be "INTEGER" and "REAL". This means there really is no
     way to prevent cross language interactions, other than to provide
     a "caveat emptor" warning to the programmer. Some programmers will
     not read the manual that closely; will implement a cross language
     service interface; will use it on various machines with no problems;
     and finally will curse the MPI implementors when it doesn't work on
     other machines. This will reduce confidence in MPI as a standard
     message passing interface.

     Note the property described in the previous bullet. In a heterogeneous
     environment, even if both client and server are written in the same
     language, the MPI implementation must accommodate conversion between
     different ranges of values for a particular type.  For example, if
     one machine represents integers as 32 bit quantities, while another
     represents them as 64 bit quantities, sending an integer parameter
     from the second to the first requires a check to ensure the 64 bit
     value can be represented as a 32 bit value (e.g., that 100,000
     represented as a 64 bit number fits into a 32 bit representation).
     This check also allows a client written in one language (say, C) to call
     a server written in another language (say, Fortran).

2. My view of the issues
------------------------

Below I summarize my view of the issues in regards to cross-language MPI
service. I am sure that there are other issues that I have not thought of
and welcome others to contribute them to the discussion.

  o  As I have stated above, MPI is a multi-use standard being targeted for
     homogeneous multi-processors, homogeneous computer clusters and
     heterogeneous distributed systems. Vendor and user communities
     representing each of these environments are participating in
     the MPI standardization process. This invariably leads to a conflict
     of objectives. For example, the community most interested in homogeneous
     multi-processors does not want to sacrifice the performance of
     parallel programs running on these machines in order to accommodate
     heterogenous distributed processing or cross-language MPI support.
     Alternatively, those interested in heterogenous distributed systems
     don't want to constrain the MPI standard in such a way that severly
     limits its applicability in those environments. Those interested in
     homogeneous computer clusters are probably somewhere in between
     with their objectives.

     Consequently, if the MPI standard is to provide cross-language support,
     it should do so in a way that doesn't penalize the performance of
     programs running on homogeneous multi-processors, while at the same
     time minimizing the implementation effort for cross-language and
     heterogenous distributed system support. Also, programmers who intend
     to use only one language should not have to think about cross-language
     issues.

  o  Cross-language support raises the question of translation between data
     values that are of a fundamentally different type (as opposed to being of
     a different "kind" in the Fortran 90 sense). For example, should the MPI
     standard provide support that would allow a Fortran program to send a
     "complex" value to a program written in C? (By this I mean support
     the transmission of the Fortran "complex" type to a C program, not
     the transmission of a "complex" value represented in some user
     specified way, like two real values). A cross-language facility may
     or may not allow this, depending on the degree of automation the
     standard is designed to provide. It is conceivable for a cross-language
     standard to support the communication of only those data types that
     are common to all of the target programming languages.

     There is also the issue of type coercion of transmitted values within
     a single language. For example C allows you to coerce a real value
     into an integer value when you assign a real value to an integer
     variable. Taking this approach would imply a sender could specify a
     real value in an MPI_ADD_BLOCK call, while the receiver specified
     an integer variable and expect MPI to perform the conversion.
     Allowing such coercion in the MPI interface would significantly increase
     its complexity, since the programmer would now have to specify not
     only the type being sent or received, but also the type being coerced.
     For this reason, I believe we have decided not to support such
     type coercion in MPI.

  o  Translation between values of the same type (but perhaps different
     "kind") across languages requires knowledge of the mapping between
     a particular language type and its machine representation. For example,
     in Fortran 77 a REAL might map to an IEEE 32 and a DOUBLE PRECISION to an
     IEEE 64. In C a float might map to an IEEE 32, a double to an IEEE 64
     and a long double to an IEEE 64. In Fortran 90 a REAL with a given
     kind parameter might map to either an IEEE 32 or an IEEE 64.  Similar
     mapping of int, long, INTEGER (with different kind parameters in
     Fortran 90), char, CHARACTER, LOGICAL and COMPLEX to underlying
     representations is required to properly support cross-language
     interoperability. Some language types that have been suggested as
     MPI types would require definition in certain languages. For example,
     LOGICAL in Fortran has no direct type analog in C. Similarly, there is
     no COMPLEX data type in C. It would be possible to simply declare
     use of these MPI types in a program written in an incompatible
     programming language as erroneous or the standard could specify
     a mapping between these type and non-native types in the appropriate
     languages (e.g., LOGICAL could map to unsigned char and COMPLEX to
     a structure containing two reals).

     In a heterogeneous environment the mapping information can be more
     complex. On a SUN Workstation REALs, DOUBLE PRECISIONS, floats, doubles
     and long doubles may map as specified above. On a CRAY, however, a
     REAL may map to a CRAY 64, a DOUBLE PRECISION to a CRAY 64, a float
     to a CRAY 64, a double to a CRAY 64 and a long double to a CRAY 128.

  o  Cross-language interoperability may require an MPI implementation
     that supports a particular language binding to be aware in some
     way of the existence of other language bindings. This may cause
     a problem when new MPI language bindings are developed. The features
     of MPI that support cross-language interoperability should allow
     the graceful integration of new language bindings into the standard.

3. A Proposal
-------------

In order to support cross-language use of MPI, I propose the following
modification to the point-to-point draft. The proposal is in two completely
independent parts. One can be accepted without accepting the other.

3.1 First Part

Modify the datatype parameter values of the MPI_ADD_... functions so that they
come from the following set :

   MPI_REAL
   MPI_DOUBLEPRECISION
   MPI_COMPLEX
   MPI_INTEGER
   MPI_LOGICAL
   MPI_CHARACTER

   MPI_FLOAT
   MPI_DOUBLE
   MPI_LONGDOUBLE
   MPI_SHORT
   MPI_INT
   MPI_LONG
   MPI_CHAR    (a character array)
   MPI_UCHAR

   MPI_BYTE

These values for the datatype parameter are allowed in any MPI implementation
irrespective of its language binding. They specify the type of the data that
is being sent/received. Notice that the first group (i.e., MPI_REAL,...,
MPI_CHARACTER) are Fortran types; the second group (MPI_FLOAT,...,MPI_UCHAR)
are C (C++) types and MPI_BYTE is a language independent type. The use of a
type from the first group in a Fortran program indicates that the data being
sent/received is in Fortran format and consequently does not require
translation. The use of a type from the first group in a C (C++) program
indicates that the data being sent/received is in Fortran format and so may
require translaton. Similarly, the use of a type from the second group in a
Fortran program indicates the data being sent/received is in C (C++) format
and so may require translation. The use of a type from the second group in a C
program indicates the data being sent/received is in C (C++) format and so
need not be translated.

A client/server interface would specify its interface in terms of these MPI
types. When a MPI_ADD_... function is called, the specified type would be
used as the datatype parameter irregardless of the MPI language binding.
Thus, if a parameter is specified as MPI_REAL, that datatype would be
specified both in Fortran and C programs using the client/server interface.
To properly pass messages, both the client and server must use the same
datatype for the parameter.

In order for the MPI implementation to take advantage of the provided type
information in a cross-language communication, it must know which Fortran
types map into which C types. Therefore, the standard should specify
this information. Let me make the following strawman proposal : MPI_REAL
maps to MPI_FLOAT; MPI_DOUBLEPRECISION maps to MPI_DOUBLE; MPI_COMPLEX
maps either to a C struct or has no mapping, which would cause an error
in a cross-language communication; MPI_INTEGER maps to MPI_INT; MPI_LOGICAL
maps to MPI_UCHAR or has no mapping, which would cause an error; and
MPI_CHARACTER maps to MPI_CHAR.

There are three C types that have no natural analogs in Fortran : MPI_SHORT,
MPI_LONG, and MPI_LONGDOUBLE. MPI_SHORT and MPI_LONG probably should map
to MPI_INTEGER, since it is the only integer type available in Fortran 77.
MPI_LONGDOUBLE probably should map to MPI_DOUBLEPRECISION. However, that means
that MPI_DOUBLE and MPI_LONGDOUBLE map to the same Fortran data type. An
alternate mapping would map MPI_DOUBLE to MPI_REAL and MPI_LONGDOUBLE to 
MPI_DOUBLEPRECISION. This requires discussion.

In addition to a standard mapping between programming language types, a
particular MPI implementation must know how the supported language types
map into underlying machine representations. For example, it must know
that REAL maps into IEEE 32, int maps into a 32 bit 2's complement value, etc.

An MPI implementation would operate as follows. I categorize the implementations
by environment in order to demonstrate properties of the previously discussed
issues.

   3.1.1 Homogeneous Mulit-processors and Computer Clusters
   --------------------------------------------------------

I describe the behavior of an MPI implementation with a Fortran language
binding. The corresponding actions of an MPI implemenation with a C language
binding should be obvious.

   3.1.1.1 Send

If the datatype parameter is in the Fortran set, block copy the data using the
underlying system network. If the datatype parameter is in the C set, use the
type mapping to decide what is the corresponding Fortran type and use the
per implementation machine representation mapping to decide the underlying
representation for both the Fortran and C type. If they are the same, block
copy the data using the underlying system network. If not, convert the data
to the appropriate underlying representation for the C type and send the
converted data.

   3.1.1.2 Receive

If the datatype parameter is in the Fortran set, the buffer in which the data
arrived is in the proper format. Make it available to the MPI caller. If
the datatype parameter is in the C set, use the type mapping to decide what
is the corresponding Fortran type and use the per implementation machine
representation maping to decide the underlying representation for both
the Fortran and C type. If they are the same, the buffer in which the
data arrived is in the proper format. Make it available to the MPI caller.
Otherwise, convert the buffer to the appropriate underlying representation
and make it available to the MPI caller.

A comment on implementation strategy. It is possible for both a send
and receive operation to know before hand whether it needs to translate
the buffer data or not (i.e., the above algorithms can be run before the
actual machine transmission is sent or received). Consequently, in those
situations in which translation is necessary, the implementation can supply
an intermediate buffer in which to translate or from which to translate the
data. By knowing both the Fortran and C types as well as their underlying
representations, the implementation can precalculate the size of the
translation buffer. 

   3.1.2 Heterogeneous Distributed Systems
   ---------------------------------------

Supporting MPI communications in a heterogeneous distributed system is more
complicated than in a homogeneous environment. Not only must differences in
programming language data types be accommodated, differences in underlying
machine represenations are also a concern. The exact algorithms to use when
sending and receiving depend on the particular presentation-level protocol
employed. Protocols like XDR and ASN.1 use a intermediate representation
of data for transmission purposes. A protocol like NDR (used in OSF DCE)
transmits the data in the format of the sender, placing the burden on the
receiver to translate it. In the following discussion I finesse the protocol
issue by using the generic description "call the off-machine protocol
translation module" to mean execute the appropriate presentation protocol
algorithm. Some implementations will combine the protocol translation activity
with sending or receiving the data.

   3.1.2.1 Send

If the datatype parameter is in the Fortran set, determine the underlying
machine represenation and call the off-machine protocol translation module
to put it into the proper format. Send the result to the receiver. If the
datatype parameter is in the C set, use the type mapping to decide what is
the corresponding Fortran type. Determine the Fortran type's underlying
representation and call the off-machine protocol translation module to put
it into the proper format. Send the result to the receiver.

   3.1.2.2 Receive

If the datatype parameter is in the Fortran set, determine the underlying
machine representation and call the off-machine protocol translation module
to put it into the proper format. Return this result to the MPI caller. If the
datatype parameter is in the C set, use the type mapping to decide what is
the corresponding Fortran type. Determine the Fortran type's underlying
representation and call the off-machine protocol translation module to
put it into the proper format. Return this result to the MPI caller.


3.2 Second Part

Cross-language interoperability raises the issue of handling data types in
one programming language that have no exact analog in another programming
language. With the current suggested language bindings for MPI (i.e., Fortran
77, Fortran 90, C and C++), I think the following types fall into this
category, one way or another :

   Fortran 77

   LOGICAL
   COMPLEX

   Fortran 90

   REAL(SELECTED_REAL_KIND(--,--))
   INTEGER(SELECTED_INT_KIND(--))
   LOGICAL
   COMPLEX
   COMPLEX(SELECTED_REAL_KIND(--,--))

C and C++ types included in the MPI standard have natural analogs in Fortran 77
and Fortran 90.

There is at least two ways to handle these type mismatches. The simplest
strategy is to generate an error when these types are referenced in an
inappropriate language. This approach has the advantage of being simple to
implement. It has the disadvantage that MPI-based programs written in one
language without thought of using it from a program written in another language
will likely use inappropriate types.

The second strategy is to define analogs in each language for the non-common
types. For example, LOGICAL in both Fortran 77 and Fortran 90 could map to
unsigned char in C. COMPLEX in Fortran 77 and Fortran 90 could map to a
struct with two float members in C. However, REAL, INT and COMPLEX with
KIND parameter information cannot be handled in this way, since the
"length" of the type is a machine dependent quantity. For example, on
some machines INTEGER(SELECTED_INT_KIND(4)) might be equivalent to an int,
while on other machines it is equivalent to a long (and not an int). Similar
"length" problems exist with the REAL(SELECTED_REAL_KIND(--,--)) type.

With these points in mind I propose the following. Map LOGICAL into unsigned
char, COMPLEX into a C struct with two floats and disallow specification
of the Fortran 90 types that specify a KIND parameter. Since Fortran 90
supports a KIND function call that the programmer can use to determine when
INTEGER and INTERGER(SELECTED_INT_KIND(--)), REAL and
REAL(SELECTED_REAL_KIND(--,--)), and COMPLEX and
COMPLEX(SELECTED_REAL_KIND(--,--)) are equivalent, there is a work around
for most cases.

4. Analysis of the Proposal
---------------------------

Following is an analysis of the proposal according to the issues specified
in section 2.

  o  As described in section 3.1.1 the proposal can be implemented in such
     a way that it does not adversely impact the performance of either
     homogeneous multi-processors or homogeneous computer clusters. The 
     programmer who writes programs in one language need never consider cross-
     language issues. Furthermore, the MPI types he/she would use would be
     natural for the programming language in which he/she is working.

  o  The issue of mapping data types not found in one programming language
     into data types found in another is addressed by the second part, which
     covers mapping of data types by defining analagous types in the
     programming language from which a type is missing. Type coercion is
     not supported between types, since it is simple to first coerce the
     type (e.g., float to int) before sending it. It is not simple to support
     this kind of type coercion from within the MPI implementation.

  o  The proposal handles translation of values of the same type
     by requiring the programmer to specify the type of data in the
     datatype parameter of the MPI_ADD_... functions. There is a limited
     amount of translation between types of different kinds due to the
     mapping required to associate a type in one language with a type
     in another language. This has the advantage of automating much
     of the work required to communicate values in a cross-language
     situation. However, there is also a possible disadvantage. In a
     heterogeneous distributed system the mapping could lead to the loss
     of information or to an error. For example, the suggested mapping
     associates a float with a REAL. On a CRAY a REAL is a 64-bit floating
     point number, while on a SUN a float is a 32-bit floating point.
     Transfering a REAL on a CRAY to a float on a SUN causes loss of
     precision and potentially could result in a translation error
     because the value on the CRAY cannot be represented by a 32-bit
     floating point. This problem also occurs on a single machine if
     a REAL maps to, say, an IEEE 64 and a float to an IEEE 32 (which
     doesn't seem likely).


  o  Adding a new language binding to the MPI standard requires the definition
     of new MPI_<type> values and the mapping between these new values and
     the existing MPI_<type> values. Introduction of MPI implementations with
     support for the new language bindings can be accomplished gradually, since
     they will support the old MPI_<types>, eventhough the old implementations
     do not support the new MPI_<types>. As vendors upgrade their MPI
     implementations to conform to the new language binding standards, the
     new MPI_<type>s can be used more and more until all useful implementations
     support them. Thus, the proposal supports the gradual introduction of
     new language bindings without requiring all implementations to immediately
     support them.
From owner-mpi-lang@CS.UTK.EDU Tue Jun 15 16:12:27 1993
Received: from CS.UTK.EDU by netlib2.cs.utk.edu with SMTP (5.61+IDA+UTK-930125/2.8t-netlib)
	id AA08770; Tue, 15 Jun 93 16:12:27 -0400
Received: from localhost by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA04027; Tue, 15 Jun 93 16:12:39 -0400
X-Resent-To: mpi-lang@CS.UTK.EDU ; Tue, 15 Jun 1993 16:12:36 EDT
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from antares.mcs.anl.gov by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA03883; Tue, 15 Jun 93 16:12:09 -0400
Received: from donner.mcs.anl.gov by antares.mcs.anl.gov with SMTP id AA03914
  (5.65c/IDA-1.4.4 for <mpi-lang@cs.utk.edu>); Tue, 15 Jun 1993 15:11:50 -0500
Message-Id: <199306152011.AA03914@antares.mcs.anl.gov>
To: als@cs.umd.edu, snir@watson.ibm.com, otto@cse.ogi.edu
Subject: language binding draft
Cc: mpi-lang@cs.utk.edu, gropp@mcs.anl.gov
Date: Tue, 15 Jun 1993 15:11:46 -0500
From: Rusty Lusk <lusk@mcs.anl.gov>

Here is the first draft of part of the language binding chapter.  I apologize
for the surrounding empty pages.  I haven't put together an economical
harness yet. 

Marc, is this the sort of thing you had in mind?  I am inexperienced in this
area.  Please let me know of any omissions besides the obvious one that it is
incomplete.  I will attempt to address them in the next version.  Also, I have
not taken notes on all the places where we have said, while discussing
something in one of the other committees, "That should be left to the language
binding committee."

Alan, do you feel comfortable presenting this at the next meeting?  I will be
unable to be there.

I am leaving for Europe on Thursday, so any comments must arrive soon.

Steve, if you don't hear from me again before Thursday evening, this is the
language binding chapter for the next meeting.  I will send you the LaTex
separately.

---------------------------------------------------------------------------
%!PS-Adobe-2.0
%%Creator: dvips 5.516 Copyright 1986, 1993 Radical Eye Software
%%Title: all.dvi
%%CreationDate: Tue Jun 15 14:58:35 1993
%%Pages: 19
%%PageOrder: Ascend
%%BoundingBox: 0 0 612 792
%%EndComments
%DVIPSCommandLine: dvips all
%DVIPSSource:  TeX output 1993.06.15:1458
%%BeginProcSet: tex.pro
/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
/X{S N}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 dup dup 4 get round 4 exch put dup dup 5 get
round 5 exch put 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 /IE 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 IE N end dup{/foo
setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /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 dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}
B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup
length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B
/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup 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 /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2
index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff
ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{
ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn
/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1
sub dup 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 dup 1 get dup mul exch 0 get dup mul add
.99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
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 /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley
false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley
scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave
transform round exch round exch itransform moveto rulex 0 rlineto 0
ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta
0 N /tail{dup /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 40258437 52099154 1000 300 300
(/tmp_mnt/Net/sparky/sparky5/lusk/mpi/june/all.dvi) @start
/Fa 31 119 df<FFFCFFFCFFFCFFFC0E047F8C13>45 D<387CFEFEFE7C3807077C8610>
I<00180000780001F800FFF800FFF80001F80001F80001F80001F80001F80001F80001F8
0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8
0001F80001F80001F80001F80001F80001F8007FFFE07FFFE013207C9F1C>49
D<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F83803F80003
F80003F00003F00007E00007C0000F80001F00003E0000380000700000E01801C0180380
180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF015207D9F1C>I<00FE0007
FFC00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C000
1F8001FE0001FF000007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF
00FEFF00FC7E01FC7801F81E07F00FFFC001FE0017207E9F1C>I<0000E00001E00003E0
0003E00007E0000FE0001FE0001FE00037E00077E000E7E001C7E00187E00307E00707E0
0E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007E00007E0
0007E00007E00007E000FFFE00FFFE17207E9F1C>I<1000201E01E01FFFC01FFF801FFF
001FFE001FF8001BC00018000018000018000018000019FC001FFF001E0FC01807E01803
E00003F00003F00003F80003F83803F87C03F8FE03F8FE03F8FC03F0FC03F07007E03007
C01C1F800FFF0003F80015207D9F1C>I<FFFFFF8000FFFFFFE00007F001F80007F000FC
0007F0007E0007F0007E0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00
07F0007E0007F000FE0007F000FC0007F003F80007FFFFF00007FFFFF00007F001FC0007
F0007E0007F0003F0007F0003F8007F0001F8007F0001FC007F0001FC007F0001FC007F0
001FC007F0001FC007F0001FC007F0003F8007F0003F8007F0007F0007F001FE00FFFFFF
F800FFFFFFC00022227EA128>66 D<0003FE0080001FFF818000FF01E38001F8003F8003
E0001F8007C0000F800F800007801F800007803F000003803F000003807F000001807E00
0001807E00000180FE00000000FE00000000FE00000000FE00000000FE00000000FE0000
0000FE00000000FE000000007E000000007E000001807F000001803F000001803F000003
801F800003000F8000030007C000060003F0000C0001F800380000FF00F000001FFFC000
0003FE000021227DA128>I<FFFFFFF8FFFFFFF807F001F807F0007807F0003807F00018
07F0001C07F0001C07F0000C07F0000C07F0180C07F0180C07F0180007F0180007F03800
07F0780007FFF80007FFF80007F0780007F0380007F0180007F0180007F0180007F01800
07F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00000FFFFE000
FFFFE0001E227EA123>70 D<FFFFFF00FFFFFFE007F007F007F001FC07F000FC07F0007E
07F0007E07F0007F07F0007F07F0007F07F0007F07F0007F07F0007E07F0007E07F000FC
07F001FC07F007F007FFFFE007FFFF0007F0000007F0000007F0000007F0000007F00000
07F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00000FFFF8000
FFFF800020227EA126>80 D<FFFFFE0000FFFFFFC00007F007F00007F001F80007F000FC
0007F0007E0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00
07F0007E0007F000FC0007F001F80007F007F00007FFFFC00007FFFF800007F00FE00007
F007F00007F003F80007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F0
01FC0007F001FC0007F001FC0007F001FC0607F000FE0607F000FF0CFFFF803FF8FFFF80
0FF027227EA12A>82 D<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001
F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF8
7F07E03F18167E951B>97 D<FF000000FF0000001F0000001F0000001F0000001F000000
1F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0FE0001F3FF800
1FF07C001F801E001F001F001F000F801F000F801F000FC01F000FC01F000FC01F000FC0
1F000FC01F000FC01F000FC01F000FC01F000F801F001F801F801F001FC03E001EE07C00
1C3FF800180FC0001A237EA21F>I<00FF8007FFE00F83F01F03F03E03F07E03F07C01E0
7C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00301F0060
0FC0E007FF8000FE0014167E9519>I<0001FE000001FE0000003E0000003E0000003E00
00003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0001FC3E00
07FFBE000F81FE001F007E003E003E007E003E007C003E00FC003E00FC003E00FC003E00
FC003E00FC003E00FC003E00FC003E00FC003E007C003E007C003E003E007E001E00FE00
0F83BE0007FF3FC001FC3FC01A237EA21F>I<00FE0007FF800F87C01E01E03E01F07C00
F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00
181F00300FC07003FFC000FF0015167E951A>I<003F8000FFC001E3E003C7E007C7E00F
87E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FFFC000F80000F80000F
80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F
80000F80000F80000F80007FF8007FF80013237FA211>I<03FC1E0FFF7F1F0F8F3E07CF
3C03C07C03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC00300000
3000003800003FFF801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E
78003C7C007C3F01F80FFFE001FF0018217E951C>I<FF000000FF0000001F0000001F00
00001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F00
00001F07E0001F1FF8001F307C001F403C001F803E001F803E001F003E001F003E001F00
3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F00
3E001F003E001F003E00FFE1FFC0FFE1FFC01A237EA21F>I<1C003E007F007F007F003E
001C000000000000000000000000000000FF00FF001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B247EA310>I<FF00FF00
1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B237EA210>
108 D<FF07F007F000FF1FFC1FFC001F303E303E001F403E403E001F801F801F001F801F
801F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F00FFE0FFE0FFE0FFE0FFE0FFE02B167E9530>I<FF07
E000FF1FF8001F307C001F403C001F803E001F803E001F003E001F003E001F003E001F00
3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F00
3E001F003E00FFE1FFC0FFE1FFC01A167E951F>I<00FE0007FFC00F83E01E00F03E00F8
7C007C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C
3E00F81F01F00F83E007FFC000FE0017167E951C>I<FF0FE000FF3FF8001FF07C001F80
3E001F001F001F001F801F001F801F000FC01F000FC01F000FC01F000FC01F000FC01F00
0FC01F000FC01F000FC01F001F801F001F801F803F001FC03E001FE0FC001F3FF8001F0F
C0001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000000FFE0
0000FFE000001A207E951F>I<FE1F00FE3FC01E67E01EC7E01E87E01E87E01F83C01F00
001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00
00FFF000FFF00013167E9517>114 D<0FF3003FFF00781F00600700E00300E00300F003
00FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E00380E00380F007
00FC0E00EFFC00C7F00011167E9516>I<01800001800001800001800003800003800007
80000780000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F80000F
80000F80000F80000F80000F80000F81800F81800F81800F81800F81800F830007C30003
FE0000F80011207F9F16>I<FF01FE00FF01FE001F003E001F003E001F003E001F003E00
1F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00
1F003E001F003E001F007E001F00FE000F81BE0007FF3FC001FC3FC01A167E951F>I<FF
E01FE0FFE01FE00F8006000F8006000FC00E0007C00C0007E01C0003E0180003E0180001
F0300001F0300000F8600000F86000007CC000007CC000007FC000003F8000003F800000
1F0000001F0000000E0000000E00001B167F951E>I E /Fb 1 16
df<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF0
03C010127D9317>15 D E /Fc 51 123 df<007000F001E003C007800F001E001C003800
38007000700070007000E000E000E000E000E000E000E000E00070007000700070003800
38001C001E000F00078003C001F000F000700C24799F18>40 D<6000F00078003C001E00
0F000780038001C001C000E000E000E000E00070007000700070007000700070007000E0
00E000E000E001C001C0038007800F001E003C007800F00060000C247C9F18>I<01C000
01C00001C00001C000C1C180F1C780F9CF807FFF001FFC0007F00007F0001FFC007FFF00
F9CF80F1C780C1C18001C00001C00001C00001C00011147D9718>I<1C3E7E7F3F1F070E
1E7CF860080C788518>44 D<3078FCFC78300606778518>46 D<00700000F80000F80000
D80000D80001DC0001DC0001DC00018C00038E00038E00038E00038E0003060007070007
07000707000707000FFF800FFF800FFF800E03800E03801C01C01C01C07F07F0FF8FF87F
07F0151C7F9B18>65 D<FFFC00FFFF00FFFF801C03C01C01C01C00E01C00E01C00E01C00
E01C01E01C01C01C07C01FFF801FFF001FFFC01C03C01C00E01C00F01C00701C00701C00
701C00701C00F01C00E01C03E0FFFFC0FFFF80FFFE00141C7F9B18>I<00F8E003FEE007
FFE00F07E01E03E03C01E03800E07000E07000E0700000E00000E00000E00000E00000E0
0000E00000E00000E000007000007000E07000E03800E03C00E01E01C00F07C007FF8003
FE0000F800131C7E9B18>I<7FF800FFFE007FFF001C0F801C03C01C03C01C01E01C00E0
1C00E01C00F01C00701C00701C00701C00701C00701C00701C00701C00701C00F01C00E0
1C00E01C01E01C01C01C03C01C0F807FFF00FFFE007FF800141C7F9B18>I<FFFFF0FFFF
F0FFFFF01C00701C00701C00701C00701C00001C00001C0E001C0E001C0E001FFE001FFE
001FFE001C0E001C0E001C0E001C00001C00001C00381C00381C00381C00381C0038FFFF
F8FFFFF8FFFFF8151C7F9B18>I<FFFFE0FFFFE0FFFFE01C00E01C00E01C00E01C00E01C
00001C00001C1C001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C1C001C00001C
00001C00001C00001C00001C00001C0000FFC000FFC000FFC000131C7E9B18>I<01F1C0
03FDC00FFFC01F0FC01C03C03803C03801C07001C07001C0700000E00000E00000E00000
E00000E00000E00FF0E01FF0E00FF07001C07001C07003C03803C03803C01C07C01F0FC0
0FFFC003FDC001F1C0141C7E9B18>I<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01
C01C01C01C01C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C01C01C01C01C01C01
C01C01C01C01C01C01C01C01C01C01C01C01C07F07F0FF8FF87F07F0151C7F9B18>I<7F
FF00FFFF807FFF0001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C0007FFF00FFFF807FFF00111C7D9B18>I<7FE000FFE0007FE0000E00000E00000E0000
0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000
0E00000E00000E00700E00700E00700E00700E00707FFFF0FFFFF07FFFF0141C7F9B18>
76 D<FC01F8FE03F8FE03F83B06E03B06E03B06E03B06E03B8EE03B8EE0398CE0398CE0
39DCE039DCE039DCE038D8E038D8E038F8E03870E03870E03800E03800E03800E03800E0
3800E03800E0FE03F8FE03F8FE03F8151C7F9B18>I<7E07F0FF0FF87F07F01D81C01D81
C01D81C01DC1C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C71C01C71C01C31C01C39
C01C39C01C39C01C19C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0FF87C07F03C0151C
7F9B18>I<0FF8003FFE007FFF00780F00700700F00780E00380E00380E00380E00380E0
0380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380F0
0780700700780F007FFF003FFE000FF800111C7D9B18>I<FFFE00FFFF80FFFFC01C03C0
1C01E01C00E01C00701C00701C00701C00701C00701C00E01C01E01C03C01FFFC01FFF80
1FFE001C00001C00001C00001C00001C00001C00001C00001C0000FF8000FF8000FF8000
141C7F9B18>I<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03
C01C03801C0F801FFF001FFE001FFE001C0F001C07001C03801C03801C03801C03801C03
801C039C1C039C1C039C7F01F8FF81F87F00F0161C7F9B18>82 D<03F3801FFF803FFF80
7C0F80700780E00380E00380E00380E000007000007800003F00001FF00007FE0000FF00
000F800003C00001C00000E00000E06000E0E000E0E001E0F001C0F80780FFFF80FFFE00
E7F800131C7E9B18>I<7FFFF8FFFFF8FFFFF8E07038E07038E07038E070380070000070
000070000070000070000070000070000070000070000070000070000070000070000070
0000700000700000700000700007FF0007FF0007FF00151C7F9B18>I<FF83FEFF83FEFF
83FE1C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C
00701C00701C00701C00701C00701C00701C00701C00700E00E00F01E00783C003FF8001
FF00007C00171C809B18>I<FF07F8FF07F8FF07F81C01C01E03C00E03800F0780070700
070700038E00038E0001DC0001DC0001DC0000F80000F800007000007000007000007000
00700000700000700000700000700001FC0003FE0001FC00151C7F9B18>89
D<FFF8FFF8FFF8E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000FFF8FFF8FF
F80D24779F18>91 D<FFF8FFF8FFF8003800380038003800380038003800380038003800
380038003800380038003800380038003800380038003800380038003800380038003800
380038FFF8FFF8FFF80D247F9F18>93 D<1FE0003FF8007FFC00781E00300E0000070000
070000FF0007FF001FFF007F0700780700E00700E00700E00700F00F00781F003FFFF01F
FBF007E1F014147D9318>97 D<7E0000FE00007E00000E00000E00000E00000E00000E00
000E3E000EFF800FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E00380E00
380E00380F00700F00700F80E00FC1E00FFFC00EFF80063E00151C809B18>I<01FE0007
FF001FFF803E0780380300700000700000E00000E00000E00000E00000E00000E0000070
00007001C03801C03E03C01FFF8007FF0001FC0012147D9318>I<001F80003F80001F80
00038000038000038000038000038003E3800FFB801FFF803C1F80380F80700780700380
E00380E00380E00380E00380E00380E00380700780700780380F803C1F801FFFF00FFBF8
03E3F0151C7E9B18>I<01F00007FC001FFE003E0F00380780700380700380E001C0E001
C0FFFFC0FFFFC0FFFFC0E000007000007001C03801C03E03C01FFF8007FF0001FC001214
7D9318>I<001F80007FC000FFE000E1E001C0C001C00001C00001C0007FFFC0FFFFC0FF
FFC001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C00001C00001C0007FFF007FFF007FFF00131C7F9B18>I<01E1F007FFF80FFFF81E1E30
1C0E003807003807003807003807003807001C0E001E1E001FFC001FF80039E000380000
1C00001FFE001FFFC03FFFE07801F0700070E00038E00038E00038E000387800F07E03F0
1FFFC00FFF8001FC00151F7F9318>I<7E0000FE00007E00000E00000E00000E00000E00
000E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00
E00E00E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC171C809B18>I<03
800007C00007C00007C0000380000000000000000000000000007FC000FFC0007FC00001
C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C00001C000FFFF00FFFF80FFFF00111D7C9C18>I<FE0000FE0000FE00000E00000E0000
0E00000E00000E00000E3FF00E7FF00E3FF00E07800E0F000E1E000E3C000E78000EF000
0FF8000FFC000F9C000F0E000E0F000E07000E03800E03C0FFC7F8FFC7F8FFC7F8151C7F
9B18>107 D<7FE000FFE0007FE00000E00000E00000E00000E00000E00000E00000E000
00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
00E00000E00000E0007FFFC0FFFFE07FFFC0131C7E9B18>I<7CE0E000FFFBF8007FFFF8
001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C
001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FFBFBF807F1F1F00191481
9318>I<7E3E00FEFF807FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00
E00E00E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC1714809318>I<01
F0000FFE001FFF003E0F803803807001C07001C0E000E0E000E0E000E0E000E0E000E0F0
01E07001C07803C03C07803E0F801FFF000FFE0001F00013147E9318>I<7E3E00FEFF80
7FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F0070
0F00700F80E00FC1E00FFFC00EFF800E3E000E00000E00000E00000E00000E00000E0000
0E00007FC000FFE0007FC000151E809318>I<01E38007FB801FFF803E1F80380F807007
80700780E00380E00380E00380E00380E00380E00380700780700780380F803C1F801FFF
800FFB8003E380000380000380000380000380000380000380000380003FF8003FF8003F
F8151E7E9318>I<7F87E0FF9FF07FBFF803F87803F03003E00003C00003C00003800003
80000380000380000380000380000380000380000380007FFE00FFFF007FFE0015147F93
18>I<07F7003FFF007FFF00780F00E00700E00700E007007C00007FE0001FFC0003FE00
001F00600780E00380E00380F00380F80F00FFFF00FFFC00E7F00011147D9318>I<0180
000380000380000380000380007FFFC0FFFFC0FFFFC00380000380000380000380000380
000380000380000380000380000380400380E00380E00380E001C1C001FFC000FF80003E
0013197F9818>I<7E07E0FE0FE07E07E00E00E00E00E00E00E00E00E00E00E00E00E00E
00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFC03FFFE01FCFC17148093
18>I<7F8FF0FF8FF87F8FF01E03C00E03800E03800E0380070700070700070700038E00
038E00038E00038E0001DC0001DC0001DC0000F80000F80000700015147F9318>I<FF8F
F8FF8FF8FF8FF83800E03800E03800E01C01C01C01C01C71C01CF9C01CF9C01CD9C01CD9
C00DDD800DDD800DDD800D8D800F8F800F8F8007070015147F9318>I<7F8FF07F9FF07F
8FF0070700078E00039E0001DC0001F80000F80000700000F00000F80001DC00039E0003
8E000707000F07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0FF8FF87F8FF00E01C0
0E03800E0380070380070700070700038700038600038E0001CE0001CE0000CC0000CC00
00DC0000780000780000780000700000700000700000F00000E00079E0007BC0007F8000
3F00001E0000151E7F9318>I<3FFFF07FFFF07FFFF07001E07003C0700780000F00001E
00003C0000F80001F00003C0000780000F00701E00703C0070780070FFFFF0FFFFF0FFFF
F014147F9318>I E /Fd 18 86 df<3078F8787005057C840D>46
D<01803001FFE003FFC003FF0003FC00020000020000020000040000040000040000047C
000587000603800C01800801C00001C00001E00001E00001E00001E07003C0F803C0F003
C0E00380800780400700400E00201C0018700007C000141F7D9D17>53
D<0000100000001800000038000000380000007800000078000000FC000001BC0000013C
0000033C0000023C0000063C0000043E0000081E0000081E0000101E0000101E0000201E
0000200F0000400F0000400F0000FFFF0000800F0001000F800100078002000780020007
8004000780040007800C0007C03E0007C0FF807FFC1E207E9F22>65
D<07FFFF00007C01C0003C01E0003C00F0007800F8007800F8007800F8007800F8007800
F8007800F000F001F000F001E000F003C000F00F8000FFFE0000F00F0001E007C001E003
C001E003E001E001E001E001E001E001E003C001E003C003E003C003E003C003C003C007
C003C00F8007800F0007803E00FFFFF0001D1F7E9E20>I<0001F808000E061800380138
007000F801E0007803C0007007800030078000300F0000301F0000301E0000303E000020
3C0000007C0000007C0000007C0000007C000000F8000000F8000000F8000000F8000000
F80000007800004078000080780000803C0000803C0001001C0002000E00020006000C00
0300100001C0E000003F00001D217B9F21>I<07FFFF00007C01E0003C00F0003C007800
78003C0078003C0078001E0078001E0078001E0078001F00F0001F00F0001F00F0001F00
F0001F00F0001F00F0001F01E0001E01E0003E01E0003E01E0003E01E0003C01E0007C03
C0007803C000F003C000F003C001E003C003C003C0078007800F0007803C00FFFFE00020
1F7E9E23>I<07FFFFF8007C0078003C0038003C00180078001800780008007800080078
0008007800080078080800F0100000F0100000F0100000F0300000FFF00000F0700001E0
200001E0200001E0200001E0200001E0000801E0001003C0001003C0001003C0002003C0
002003C0006003C000C0078001C0078007C0FFFFFF801D1F7E9E1F>I<07FFFFF8007C00
78003C0038003C001800780018007800080078000800780008007800080078000800F010
0000F0100000F0100000F0300000F0700000FFF00001E0600001E0200001E0200001E020
0001E0200001E0000003C0000003C0000003C0000003C0000003C0000003C00000078000
0007C00000FFFE00001D1F7E9E1E>I<0001FC04000F030C003C009C0070007C00E0003C
01C0003803800018078000180F0000181F0000181E0000183E0000103C0000007C000000
7C0000007C0000007C000000F8000000F8000000F8007FFCF80003E0780001E0780001E0
780003C0780003C03C0003C03C0003C01C0003C00E0007C007000B800380118001E06080
003F80001E217B9F24>I<07FFC7FFC0007C00F800003C007800003C007800007800F000
007800F000007800F000007800F000007800F000007800F00000F001E00000F001E00000
F001E00000F001E00000FFFFE00000F001E00001E003C00001E003C00001E003C00001E0
03C00001E003C00001E003C00003C007800003C007800003C007800003C007800003C007
800003C007800007800F000007C00F8000FFF8FFF800221F7E9E22>I<07FFE0007C0000
3C00003C0000780000780000780000780000780000780000F00000F00000F00000F00000
F00000F00001E00001E00001E00001E00001E00001E00003C00003C00003C00003C00003
C00003C00007800007C000FFFC00131F7F9E10>I<07FFF000007E0000003C0000003C00
0000780000007800000078000000780000007800000078000000F0000000F0000000F000
0000F0000000F0000000F0000001E0000001E0000001E0000001E0000001E0008001E001
0003C0010003C0010003C0030003C0020003C0060003C0060007801E0007807C00FFFFFC
00191F7E9E1C>76 D<07FC01FFC0003E003E00003E001800003E001800004F001000004F
001000004780100000478010000043C010000043C010000083C020000081E020000081E0
20000080F020000080F020000080782000010078400001007C400001003C400001003C40
0001001E400001001E400002000F800002000F800002000F800002000780000200078000
060003800006000300000F00010000FFE0010000221F7E9E22>78
D<07FFFF00007C03C0003C01E0003C00F0007800F0007800F8007800F8007800F8007800
F8007800F000F001F000F001E000F003C000F0078000F00F0000FFF80001E0000001E000
0001E0000001E0000001E0000001E0000003C0000003C0000003C0000003C0000003C000
0003C000000780000007C00000FFFC00001D1F7E9E1F>80 D<07FFFC00007C0700003C03
C0003C01E0007801E0007801F0007801F0007801F0007801F0007801E000F003E000F003
C000F0078000F00F0000F03C0000FFF00001E0300001E0380001E01C0001E01C0001E01C
0001E01E0003C03E0003C03E0003C03E0003C03E0003C03E0003C03E0207803E0407C01F
04FFFC0F18000003E01F207E9E21>82 D<003F040060CC01803C03801C03001C07001806
00080E00080E00080E00080E00000F00000F80000FE00007FE0003FF8001FFC0007FE000
07E00001E00000E00000F00000F04000E04000E04000E04000E06000C0600180E00380F8
0300C60C0081F80016217D9F19>I<3FFFFFF03C0780F03007803060078030400F001040
0F0010C00F0010800F0010800F0010800F0010001E0000001E0000001E0000001E000000
1E0000001E0000003C0000003C0000003C0000003C0000003C0000003C00000078000000
7800000078000000780000007800000078000000F0000001F800007FFFE0001C1F7A9E21
>I<FFFC3FF80F8007C007800300078003000F0002000F0002000F0002000F0002000F00
02000F0002001E0004001E0004001E0004001E0004001E0004001E0004003C0008003C00
08003C0008003C0008003C0008003C000800380010003800100038001000380020003C00
40001C0040001C0080000E0100000706000001F800001D20799E22>I
E /Fe 31 122 df<60F0F06004047C830C>46 D<0FE03038401CE00EF00EF00EF00E000C
001C0030006000C000800180010001000100010001000100000000000000000000000300
0780078003000F1D7E9C14>63 D<FFFFC00F00F00F00380F003C0F001C0F001E0F001E0F
001E0F001E0F001C0F003C0F00780F01F00FFFE00F00780F003C0F001E0F000E0F000F0F
000F0F000F0F000F0F000F0F001E0F001E0F003C0F0078FFFFE0181C7E9B1D>66
D<001F808000E0618001801980070007800E0003801C0003801C00018038000180780000
807800008070000080F0000000F0000000F0000000F0000000F0000000F0000000F00000
00F0000000700000807800008078000080380000801C0001001C0001000E000200070004
000180080000E03000001FC000191E7E9C1E>I<FFFFF80F00780F00180F00080F00080F
000C0F00040F00040F02040F02000F02000F02000F06000FFE000F06000F02000F02000F
02000F02000F00000F00000F00000F00000F00000F00000F00000F8000FFF800161C7E9B
1B>70 D<FFF00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
0F000F000F000F000F000F000F000F000F000F000F00FFF00C1C7F9B0F>73
D<003F800000E0E0000380380007001C000E000E001C0007003C00078038000380780003
C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001
E0F00001E0700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C
000380380000E0E000003F80001B1E7E9C20>79 D<7FFFFFC0700F01C0600F00C0400F00
40400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F0000000F00
00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00
00000F0000000F0000000F0000000F0000001F800003FFFC001B1C7F9B1E>84
D<FFE0FFE0FF1F001F003C1E001E00180F001F00100F001F00100F001F001007801F0020
0780278020078027802003C027804003C043C04003C043C04003E043C04001E081E08001
E081E08001E081E08000F100F10000F100F10000F100F100007900FA00007A007A00007A
007A00003E007C00003C003C00003C003C00003C003C0000180018000018001800001800
1800281D7F9B2B>87 D<1FC000307000783800781C00301C00001C00001C0001FC000F1C
00381C00701C00601C00E01C40E01C40E01C40603C40304E801F870012127E9115>97
D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C
001D86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C00
C01C01C01C01801E030019060010F800131D7F9C17>I<07E00C301878307870306000E0
00E000E000E000E000E00060007004300418080C3007C00E127E9112>I<003F00000700
00070000070000070000070000070000070000070000070000070003E7000C1700180F00
300700700700600700E00700E00700E00700E00700E00700E00700600700700700300700
180F000C370007C7E0131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E000
E000E00060007002300218040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E
000E000E000E000E00FFE00E000E000E000E000E000E000E000E000E000E000E000E000E
000E000E000E007FE00F1D809C0D>I<00038003C4C00C38C01C3880181800381C00381C
00381C00381C001818001C38000C300013C0001000003000001800001FF8001FFF001FFF
803003806001C0C000C0C000C0C000C06001803003001C0E0007F800121C7F9215>I<FC
00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001C
87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
03801C03801C03801C0380FF9FF0141D7F9C17>I<18003C003C00180000000000000000
00000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C
001C001C00FF80091D7F9C0C>I<FC001C001C001C001C001C001C001C001C001C001C00
1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80
091D7F9C0C>108 D<FC7E07E0001C838838001D019018001E01E01C001C01C01C001C01
C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C0
1C001C01C01C001C01C01C001C01C01C001C01C01C00FF8FF8FF8021127F9124>I<FC7C
001C87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C03
801C03801C03801C03801C0380FF9FF014127F9117>I<03F0000E1C0018060030030070
0380600180E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E
1C0003F00012127F9115>I<FC7C001D86001E03001C01801C01C01C00C01C00E01C00E0
1C00E01C00E01C00E01C00E01C01C01C01C01C01801E03001D06001CF8001C00001C0000
1C00001C00001C00001C00001C0000FF8000131A7F9117>I<FCE01D301E781E781C301C
001C001C001C001C001C001C001C001C001C001C001C00FFC00D127F9110>114
D<1F9030704030C010C010E010F8007F803FE00FF000F880388018C018C018E010D0608F
C00D127F9110>I<04000400040004000C000C001C003C00FFE01C001C001C001C001C00
1C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F9910>I<FC1F801C03
801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
801C07800C07800E1B8003E3F014127F9117>I<FF07E03C03801C01001C01000E02000E
020007040007040007040003880003880003D80001D00001D00000E00000E00000E00000
400013127F9116>I<FF3FCFE03C0F03801C0701801C0701001C0B01000E0B82000E0B82
000E1182000711C4000711C4000720C40003A0E80003A0E80003C0680001C0700001C070
0001803000008020001B127F911E>I<7F8FF00F03800F030007020003840001C80001D8
0000F00000700000780000F800009C00010E00020E000607000403801E07C0FF0FF81512
809116>I<FF07E03C03801C01001C01000E02000E020007040007040007040003880003
880003D80001D00001D00000E00000E00000E000004000004000008000008000F08000F1
0000F300006600003C0000131A7F9116>I E /Ff 8 118 df<78FCFCFCFC780000000000
0078FCFCFCFC7806127D910D>58 D<FFFFF800FFFFFF000FC01FC00FC007E00FC001F00F
C001F80FC000F80FC000FC0FC0007C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E0F
C0007E0FC0007E0FC0007E0FC0007E0FC0007C0FC0007C0FC0007C0FC000F80FC000F80F
C001F00FC007E00FC01FC0FFFFFF00FFFFF8001F1C7E9B25>68 D<03FC000E0E001C1F00
3C1F00781F00780E00F80000F80000F80000F80000F80000F800007800007801803C0180
1C03000E0E0003F80011127E9115>99 D<1E003F003F003F003F001E0000000000000000
0000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F
00FFE0FFE00B1E7F9D0E>105 D<FF0FC0FF31E01F40F01F80F81F80F81F00F81F00F81F
00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE7FFFFE7FF18127F91
1B>110 D<01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8F800F8F8
00F8F800F87800F07800F03C01E01E03C00F078001FC0015127F9118>I<1FD830786018
E018E018F000FF807FE07FF01FF807FC007CC01CC01CE01CE018F830CFC00E127E9113>
115 D<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8
1F00F81F00F81F00F81F01F80F01F80786FF01F8FF18127F911B>117
D E /Fg 32 122 df<0001FF0000001FFFC000007F80F00000FC00F80001F801F80003F8
03FC0007F003FC0007F003FC0007F003FC0007F001F80007F000F00007F000000007F000
000007F000000007F0000000FFFFFFFC00FFFFFFFC00FFFFFFFC0007F001FC0007F001FC
0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC00
07F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007
F001FC0007F001FC0007F001FC0007F001FC0007F001FC007FFF1FFFC07FFF1FFFC07FFF
1FFFC0222A7FA926>12 D<1C003E007F00FF80FF80FF807F003E001C0009097B8813>46
D<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE
0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
007FFFFE7FFFFE7FFFFE17277BA622>49 D<00FF800003FFF0000FFFFC001F03FE003800
FF007C007F80FE003FC0FF003FC0FF003FE0FF001FE0FF001FE07E001FE03C003FE00000
3FE000003FC000003FC000007F8000007F000000FE000000FC000001F8000003F0000003
E00000078000000F0000001E0000003C00E0007000E000E000E001C001C0038001C00700
01C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF801B277DA622>
I<007F800003FFF00007FFFC000F81FE001F00FF003F80FF003F807F803F807F803F807F
801F807F800F007F800000FF000000FF000000FE000001FC000001F8000007F00000FFC0
0000FFF0000001FC0000007E0000007F0000007F8000003FC000003FC000003FE000003F
E03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC07E007F807C007F003F01FE
001FFFFC0007FFF00000FF80001B277DA622>I<00000E0000001E0000003E0000007E00
0000FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E0000387E00
00707E0000E07E0000E07E0001C07E0003807E0007007E000E007E000E007E001C007E00
38007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE00
0000FE000000FE000000FE000000FE000000FE00007FFFF8007FFFF8007FFFF81D277EA6
22>I<0C0003000F803F000FFFFE000FFFFC000FFFF8000FFFF0000FFFE0000FFFC0000F
FE00000E0000000E0000000E0000000E0000000E0000000E0000000E7FC0000FFFF8000F
80FC000E003E000C003F0000001F8000001FC000001FC000001FE000001FE018001FE07C
001FE0FE001FE0FE001FE0FE001FE0FE001FC0FC001FC078003F8078003F803C007F001F
01FE000FFFF80003FFF00000FF80001B277DA622>I<380000003E0000003FFFFFF03FFF
FFF03FFFFFF07FFFFFE07FFFFFC07FFFFF807FFFFF0070000E0070000E0070001C00E000
3800E0007000E000E0000000E0000001C000000380000007800000078000000F0000000F
0000001F0000001F0000003F0000003E0000003E0000007E0000007E0000007E0000007E
000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000007C
0000003800001C297CA822>55 D<FFFFFFF80000FFFFFFFF8000FFFFFFFFC00003F8001F
F00003F8000FF80003F80007FC0003F80003FC0003F80003FC0003F80003FE0003F80001
FE0003F80001FE0003F80001FE0003F80003FE0003F80003FC0003F80003FC0003F80007
F80003F8000FF00003F8001FE00003F800FFC00003FFFFFE000003FFFFFFE00003F80007
F00003F80003FC0003F80001FE0003F80001FE0003F80000FF0003F80000FF0003F80000
FF8003F80000FF8003F80000FF8003F80000FF8003F80000FF8003F80000FF8003F80000
FF0003F80001FF0003F80003FE0003F80007FC0003F8001FF800FFFFFFFFF000FFFFFFFF
C000FFFFFFFE000029297DA831>66 D<00003FF001800003FFFE0380000FFFFF8780003F
F007DF8000FF8001FF8001FE00007F8003FC00003F8007F000001F800FF000000F801FE0
000007801FE0000007803FC0000007803FC0000003807FC0000003807F80000003807F80
00000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80
00000000FF8000000000FF8000000000FF80000000007F80000000007F80000000007FC0
000003803FC0000003803FC0000003801FE0000003801FE0000007000FF00000070007F0
00000E0003FC00001E0001FE00003C0000FF8000F800003FF007E000000FFFFFC0000003
FFFF000000003FF8000029297CA832>I<FFFFFFF80000FFFFFFFF8000FFFFFFFFE00003
FC001FF80003FC0007FC0003FC0001FE0003FC0000FF0003FC00007F8003FC00003FC003
FC00001FC003FC00001FE003FC00001FE003FC00000FF003FC00000FF003FC00000FF003
FC00000FF003FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803
FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF003
FC00000FF003FC00000FF003FC00001FE003FC00001FE003FC00001FC003FC00003FC003
FC00007F8003FC00007F0003FC0001FE0003FC0003FC0003FC001FF800FFFFFFFFE000FF
FFFFFF8000FFFFFFFC00002D297DA835>I<FFFFFFFFC0FFFFFFFFC0FFFFFFFFC003FC00
3FC003FC000FE003FC0003E003FC0001E003FC0001E003FC0000E003FC0000E003FC0000
E003FC0000F003FC03807003FC03807003FC03807003FC03800003FC07800003FC078000
03FC1F800003FFFF800003FFFF800003FFFF800003FC1F800003FC07800003FC07800003
FC03800003FC03800003FC03800003FC03800003FC00000003FC00000003FC00000003FC
00000003FC00000003FC00000003FC00000003FC00000003FC000000FFFFFC0000FFFFFC
0000FFFFFC000024297DA82B>70 D<FFFFFCFFFFFCFFFFFC01FE0001FE0001FE0001FE00
01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
01FE0001FE0001FE0001FE0001FE0001FE0001FE00FFFFFCFFFFFCFFFFFC16297EA81A>
73 D<FFFC0000FFFEFFFE0000FFFEFFFF0000FFFE03FF8000038003FF8000038003BFC0
000380039FE0000380039FF0000380038FF80003800387F80003800383FC0003800381FE
0003800381FF0003800380FF80038003807FC0038003803FC0038003801FE0038003800F
F0038003800FF80380038007FC0380038003FC0380038001FE0380038000FF0380038000
FF83800380007FC3800380003FE3800380001FE3800380000FF38003800007FB80038000
07FF8003800003FF8003800001FF8003800000FF80038000007F80038000007F80038000
003F80038000001F80038000000F80FFFE00000780FFFE00000380FFFE000003802F297D
A836>78 D<007F806003FFF0E007FFF9E00F807FE01F001FE03E0007E07C0003E07C0001
E0FC0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0
003FFFFC001FFFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007FFF000007FF000000F
F8000007F8000003F8600001F8E00001F8E00001F8E00001F8F00001F0F00001F0F80003
F0FC0003E0FF0007C0FFE01F80F3FFFF00E0FFFE00C01FF0001D297CA826>83
D<7FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC03FC07E003FC007C078003FC003
C078003FC003C070003FC001C0F0003FC001E0F0003FC001E0E0003FC000E0E0003FC000
E0E0003FC000E0E0003FC000E0E0003FC000E000003FC0000000003FC0000000003FC000
0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000
0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000
0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000
0000003FC00000007FFFFFE000007FFFFFE000007FFFFFE0002B287EA730>I<01FF8000
07FFF0000F81F8001FC07E001FC07E001FC03F000F803F8007003F8000003F8000003F80
00003F80000FFF8000FFFF8007FC3F800FE03F803F803F803F003F807F003F80FE003F80
FE003F80FE003F80FE003F807E007F807F00DF803F839FFC0FFF0FFC01FC03FC1E1B7E9A
21>97 D<001FF80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E00
7F0000007F000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
7F0000007F0000007F8000003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00
001FE0001A1B7E9A1F>99 D<00003FF80000003FF80000003FF800000003F800000003F8
00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
000003F800000003F800000003F800001FE3F80000FFFBF80003F03FF80007E00FF8000F
C007F8001F8003F8003F8003F8007F0003F8007F0003F8007F0003F800FF0003F800FF00
03F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8007F0003F8007F0003
F8007F0003F8003F8003F8001F8003F8000F8007F80007C00FF80003F03BFF8000FFF3FF
80003FC3FF80212A7EA926>I<003FE00001FFF80003F07E0007C01F000F801F801F800F
803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF0000
00FF000000FF0000007F0000007F0000007F0000003F8000E01F8000E00FC001C007E003
8003F81F0000FFFE00001FF0001B1B7E9A20>I<00FF81F003FFE7F80FC1FE7C1F80FC7C
1F007C383F007E107F007F007F007F007F007F007F007F007F007F007F007F003F007E00
1F007C001F80FC000FC1F8001FFFE00018FF800038000000380000003C0000003E000000
3FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF03E0007F07C0001F8F80000F8
F80000F8F80000F8F80000F87C0001F03C0001E01F0007C00FC01F8003FFFE00007FF000
1E287E9A22>103 D<07000F801FC03FE03FE03FE01FC00F800700000000000000000000
0000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
E00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B7DAA14>105
D<FFC07F800FF000FFC1FFE03FFC00FFC383F0707E000FC603F8C07F000FCC01F9803F00
0FD801FF003F800FF001FE003F800FF001FE003F800FE001FC003F800FE001FC003F800F
E001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE0
01FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001
FC003F800FE001FC003F800FE001FC003F800FE001FC003F80FFFE1FFFC3FFF8FFFE1FFF
C3FFF8FFFE1FFFC3FFF8351B7D9A3A>109 D<FFC07F0000FFC1FFC000FFC787E0000FCE
03F0000FD803F0000FD803F8000FF003F8000FF003F8000FE003F8000FE003F8000FE003
F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800FFFE3FFF80
FFFE3FFF80FFFE3FFF80211B7D9A26>I<003FE00001FFFC0003F07E000FC01F801F800F
C03F800FE03F0007E07F0007F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007
F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F800FE03F800FE01F800F
C00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>I<FFE1FE0000FFE7FF8000FFFE
07E0000FF803F0000FF001F8000FE000FC000FE000FE000FE000FF000FE0007F000FE000
7F000FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F
800FE0007F000FE000FF000FE000FF000FE000FE000FE001FC000FF001F8000FF803F000
0FFE0FE0000FE7FF80000FE1FC00000FE00000000FE00000000FE00000000FE00000000F
E00000000FE00000000FE00000000FE00000000FE0000000FFFE000000FFFE000000FFFE
00000021277E9A26>I<FFC1F0FFC7FCFFCE3E0FD87F0FD87F0FF07F0FF03E0FF01C0FE0
000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0
000FE0000FE0000FE000FFFF00FFFF00FFFF00181B7E9A1C>114
D<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF
803FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC00
70FF01E0F7FFC0C1FF00161B7E9A1B>I<00700000700000700000700000F00000F00000
F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007
F00007F00007F00007F00007F00007F00007F00007F00007F00007F03807F03807F03807
F03807F03807F03803F03803F87001F86000FFC0001F8015267FA51B>I<FFE03FF800FF
E03FF800FFE03FF8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0
03F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003
F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE007F80007E007F8
0007E00FF80003F03BFF8001FFF3FF80003FC3FF80211B7D9A26>I<FFFE03FF80FFFE03
FF80FFFE03FF8007F000700007F000700007F800F00003F800E00003FC01E00001FC01C0
0001FC01C00000FE03800000FE038000007F070000007F070000007F8F0000003F8E0000
003FDE0000001FDC0000001FDC0000000FF80000000FF80000000FF800000007F0000000
07F000000003E000000003E000000001C00000211B7F9A24>I<FFFE03FF80FFFE03FF80
FFFE03FF8007F000700007F000700007F800F00003F800E00003FC01E00001FC01C00001
FC01C00000FE03800000FE038000007F070000007F070000007F8F0000003F8E0000003F
DE0000001FDC0000001FDC0000000FF80000000FF80000000FF800000007F000000007F0
00000003E000000003E000000001C000000001C000000003800000000380000038078000
007C07000000FE0F000000FE0E000000FE1E000000FE3C0000007C780000003FE0000000
0FC000000021277F9A24>121 D E /Fh 15 117 df<00001E000000003E00000000FE00
000003FE0000003FFE0000FFFFFE0000FFFFFE0000FFFFFE0000FFCFFE0000000FFE0000
000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000000
0FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000F
FE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE
0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00
00000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000
000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00007FFFFFFFC07F
FFFFFFC07FFFFFFFC07FFFFFFFC0223879B731>49 D<0007FE0000007FFFE00001FFFFF8
0003FFFFFE0007F01FFF000F8007FF801F0001FFC03E0000FFE07F8000FFF07FC0007FF0
FFE0007FF8FFF0003FF8FFF0003FFCFFF0003FFCFFF0003FFCFFF0003FFC7FE0003FFC3F
C0003FFC1F80003FFC0000003FFC0000003FF80000007FF80000007FF00000007FF00000
00FFE0000000FFC0000001FF80000001FF00000003FE00000007FC00000007F80000000F
F00000001FC00000003F800000007F00000000FC00000001F800000001F0003C0003E000
3C0007C0003C000F000078001E000078003C00007800780000F800F00000F801FFFFFFF8
03FFFFFFF007FFFFFFF00FFFFFFFF01FFFFFFFF03FFFFFFFF07FFFFFFFF0FFFFFFFFF0FF
FFFFFFE0FFFFFFFFE0FFFFFFFFE026387BB731>I<0003FF8000001FFFF000007FFFFE00
00FE03FF0001F000FF8003C000FFC00780007FE00FF0007FF00FF8007FF01FFC007FF81F
FE007FF81FFE007FF81FFE007FF81FFE007FF81FFE007FF80FFC007FF007F8007FF003F0
007FF0000000FFE0000000FFC0000001FF80000001FF00000003FE00000007FC0000001F
F000000FFFC000000FFF8000000FFFF800000003FE00000000FF800000007FE00000003F
F00000003FF80000003FFC0000001FFC0000001FFE0000001FFE0200001FFF1FC0001FFF
3FE0001FFF7FF0001FFF7FF0001FFFFFF8001FFFFFF8001FFFFFF8001FFEFFF8001FFEFF
F0001FFE7FF0003FFC7FE0003FFC3FC0003FF81F80007FF01FE000FFE007FC03FFC003FF
FFFF0001FFFFFE00003FFFF0000007FF800028397CB731>I<00000007C0000000000FC0
000000000FC0000000001FC0000000003FC0000000007FC000000000FFC000000000FFC0
00000001FFC000000003FFC000000007FFC00000000FFFC00000000FFFC00000001EFFC0
0000003CFFC00000007CFFC0000000F8FFC0000000F0FFC0000001E0FFC0000003C0FFC0
000007C0FFC000000F80FFC000000F00FFC000001E00FFC000003C00FFC000007C00FFC0
0000F800FFC00000F000FFC00001E000FFC00003C000FFC00007C000FFC0000F8000FFC0
000F0000FFC0001E0000FFC0003C0000FFC0007C0000FFC000F80000FFC000FFFFFFFFFF
C0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0000001FFC000000001FFC000000001FFC0
00000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0
00000001FFC0000007FFFFFFC00007FFFFFFC00007FFFFFFC00007FFFFFFC02A377DB631
>I<04000000C00F800007C00FF8007FC00FFFFFFF800FFFFFFF000FFFFFFE000FFFFFFC
000FFFFFF8000FFFFFF0000FFFFFE0000FFFFF80000FFFFE00000FFFF800000F80000000
0F800000000F800000000F800000000F800000000F800000000F800000000F800000000F
81FF00000F8FFFE0000FBFFFF8000FFE03FE000FF000FF000FC000FF800F80007FC00F00
007FE00700007FF00000003FF00000003FF80000003FF80000003FF80000003FFC000000
3FFC0600003FFC1F80003FFC3FC0003FFC7FE0003FFCFFE0003FFCFFF0003FFCFFF0003F
FCFFF0003FF8FFE0003FF8FFE0003FF87FC0007FF07F00007FF03C00007FE03E0000FFC0
1F0000FF800FC003FF0007F00FFE0003FFFFFC0001FFFFF000007FFFC000000FFC000026
397BB731>I<00000FF80000007FFF000003FFFF80000FFC07C0001FE001E0003FC001F0
007F0007F000FF000FF001FE001FF803FC003FF807FC003FF80FFC003FF80FF8003FF81F
F8001FF01FF8000FE03FF80007C03FF00000003FF00000007FF00000007FF00000007FF0
0000007FF07FF000FFF0FFFE00FFF1F7FF00FFF3807F80FFF6003FE0FFFE001FF0FFFC00
1FF0FFFC000FF8FFF8000FFCFFF8000FFCFFF8000FFEFFF8000FFEFFF0000FFEFFF0000F
FFFFF0000FFFFFF0000FFF7FF0000FFF7FF0000FFF7FF0000FFF7FF0000FFF7FF0000FFF
3FF0000FFF3FF0000FFE3FF0000FFE1FF0000FFE1FF8000FFC0FF8000FFC0FF8001FF807
FC001FF003FC001FF001FE003FE000FF80FFC0007FFFFF00001FFFFE000007FFF8000000
FFC00028397CB731>I<1E00000000001F00000000001FF0000000001FFFFFFFFFC01FFF
FFFFFFC01FFFFFFFFFC03FFFFFFFFFC03FFFFFFFFF803FFFFFFFFF003FFFFFFFFE003FFF
FFFFFC003FFFFFFFF8003FFFFFFFF0007FFFFFFFF0007C000007E0007C00000FC0007800
001F80007800001F00007800003E0000F000007E0000F00000FC0000F00001F800000000
03F00000000003E00000000007E0000000000FC0000000000F80000000001F8000000000
3F80000000003F00000000007F00000000007F0000000000FF0000000000FE0000000001
FE0000000001FE0000000003FE0000000003FE0000000003FE0000000007FC0000000007
FC0000000007FC000000000FFC000000000FFC000000000FFC000000000FFC000000000F
FC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001F
FC000000001FFC000000001FFC000000001FFC000000000FF80000000007F00000000003
E00000002A3B7BB931>I<0001FF8000000FFFF800003FFFFE00007F00FF0000F8003F80
01F0000FC003E0000FE007C00007F007C00007F00FC00003F80FC00003F81FC00003F81F
C00003F81FE00003F81FF00003F81FF80003F81FFC0007F01FFF0007F01FFFC007E00FFF
F00FE00FFFFC1FC007FFFE3F8007FFFFFF0003FFFFFC0001FFFFF80000FFFFFE00007FFF
FF00003FFFFF80003FFFFFE000FFFFFFF001FDFFFFF007F07FFFF80FE01FFFFC1FC007FF
FC3F8001FFFE3F8000FFFE7F00003FFF7F00000FFFFE000003FFFE000001FFFE000000FF
FE000000FFFE0000007FFE0000007FFE0000007EFE0000007E7F0000007E7F000000FC3F
800000FC3FC00001F81FE00003F00FF00007E007FE007FC003FFFFFF8000FFFFFE00003F
FFF8000003FF800028397CB731>I<0000001FFF000030000001FFFFE000F000000FFFFF
FC01F000007FFFFFFE03F00001FFFE007F87F00003FFE0000FCFF0000FFF000003FFF000
1FFC000001FFF0003FF80000007FF0007FF00000003FF000FFC00000003FF001FFC00000
001FF003FF800000000FF007FF000000000FF00FFF0000000007F00FFE0000000007F01F
FE0000000003F01FFE0000000003F03FFC0000000003F03FFC0000000001F03FFC000000
0001F07FFC0000000001F07FF80000000001F07FF80000000000007FF8000000000000FF
F8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000
000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FF
F8000000000000FFF80000000000007FF80000000000007FF80000000000007FF8000000
0000007FFC0000000000F03FFC0000000000F03FFC0000000000F03FFC0000000000F01F
FE0000000000F01FFE0000000001E00FFE0000000001E00FFF0000000001E007FF000000
0003C003FF8000000003C001FFC0000000078000FFE00000000F00007FF00000001F0000
3FF80000003E00001FFC0000007C00000FFF000001F8000003FFE00007F0000001FFFE00
3FC00000007FFFFFFF000000000FFFFFFC0000000001FFFFF000000000001FFF0000003C
3D7BBB47>67 D<001FFF00000001FFFFF0000003FFFFFC000007F007FE00000FF801FF00
001FFC00FF80001FFC007FC0001FFC007FE0001FFC003FE0000FF8003FF0000FF8003FF0
0007F0003FF00001C0003FF0000000003FF0000000003FF0000000003FF0000000FFFFF0
00000FFFFFF000007FF83FF00001FF803FF00007FE003FF0000FF8003FF0001FF0003FF0
003FE0003FF0007FE0003FF0007FE0003FF000FFC0003FF000FFC0003FF000FFC0003FF0
00FFC0003FF000FFC0007FF0007FE0007FF0007FE000DFF0003FF0039FF8001FFC0F0FFF
F007FFFE0FFFF001FFFC07FFF0003FE000FFF02C267DA530>97 D<0001FFC000000FFFF8
00003FFFFE0000FF80FF0001FE003F8007FC001FC00FF8000FE00FF8000FF01FF00007F0
3FF00007F83FF00007F87FE00007F87FE00003FC7FE00003FC7FE00003FCFFE00003FCFF
FFFFFFFCFFFFFFFFFCFFFFFFFFFCFFE0000000FFE0000000FFE0000000FFE00000007FE0
0000007FE00000007FE00000003FE00000003FF000003C1FF000003C1FF000003C0FF800
007807FC0000F803FE0001F001FF0007E000FFC03FC0003FFFFF000007FFFC000000FFE0
0026267DA52D>101 D<00FF00000000FFFF00000000FFFF00000000FFFF00000000FFFF
0000000007FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF
0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF
0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF
007FC00003FF01FFF80003FF07FFFC0003FF0F03FE0003FF1C01FF0003FF3001FF8003FF
6000FF8003FFE000FFC003FFC000FFC003FF8000FFC003FF8000FFC003FF8000FFC003FF
0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF
0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF
0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF
0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFF
FC3FFFFFFFFFFC3FFFFF303C7CBB37>104 D<00FF01FF8000FFFF0FFFF000FFFF3FFFFC
00FFFFFE03FF00FFFFF000FF8003FFC0007FC003FF80003FE003FF00003FF003FF00001F
F803FF00001FFC03FF00000FFC03FF00000FFE03FF00000FFE03FF000007FE03FF000007
FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007
FF03FF000007FF03FF000007FF03FF000007FE03FF000007FE03FF00000FFE03FF00000F
FC03FF00000FFC03FF00001FF803FF00001FF803FF00003FF003FF80003FE003FFC0007F
C003FFF001FF8003FFFC07FF0003FF3FFFFC0003FF0FFFF00003FF01FF000003FF000000
0003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF000000
0003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF000000
00FFFFFC000000FFFFFC000000FFFFFC000000FFFFFC00000030377DA537>112
D<00FE03F000FFFE0FFE00FFFE1FFF00FFFE3C3F80FFFE707FC007FE60FFE003FEE0FFE0
03FEC0FFE003FFC0FFE003FF807FC003FF807FC003FF803F8003FF800E0003FF00000003
FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF
00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00
000003FF00000003FF00000003FF00000003FF00000003FF000000FFFFFE0000FFFFFE00
00FFFFFE0000FFFFFE000023267DA529>114 D<00078000000780000007800000078000
00078000000F8000000F8000000F8000000F8000001F8000001F8000003F8000003F8000
007F800000FF800001FF800007FF80001FFFFFF0FFFFFFF0FFFFFFF0FFFFFFF001FF8000
01FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF8000
01FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF8000
01FF803C01FF803C01FF803C01FF803C01FF803C01FF803C01FF803C01FF803C00FF8078
00FFC078007FC070003FE0E0001FFFC00007FF800001FF001E377EB626>116
D E /Fi 1 98 df<001800001800001800003C00003C00004E00004E00004E0000870000
87000187800103800103800201C00201C003FFC00400E00400E00800700800701800703C
0078FE01FF18177F961C>97 D E /Fj 1 59 df<70F8F8F87005057C840D>58
D E /Fk 67 123 df<003F0000E0C001C0C00381E00701E00701E0070000070000070000
070000070000070000FFFFE00700E00700E00700E00700E00700E00700E00700E00700E0
0700E00700E00700E00700E00700E00700E00700E00700E00700E00700E07FC3FE172080
9F19>12 D<003FE000E0E001C1E00381E00700E00700E00700E00700E00700E00700E007
00E00700E0FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E007
00E00700E00700E00700E00700E00700E00700E00700E00700E07FE7FE1720809F19>I<
001F81F80000F04F040001C07C06000380F80F000300F00F000700F00F00070070000007
007000000700700000070070000007007000000700700000FFFFFFFF0007007007000700
700700070070070007007007000700700700070070070007007007000700700700070070
070007007007000700700700070070070007007007000700700700070070070007007007
00070070070007007007007FE3FE3FF02420809F26>I<7038F87CFC7EFC7E743A040204
0204020804080410081008201040200F0E7E9F17>34 D<0020004000800100020006000C
000C00180018003000300030007000600060006000E000E000E000E000E000E000E000E0
00E000E000E000E0006000600060007000300030003000180018000C000C000600020001
000080004000200B2E7DA112>40 D<800040002000100008000C00060006000300030001
800180018001C000C000C000C000E000E000E000E000E000E000E000E000E000E000E000
E000C000C000C001C001800180018003000300060006000C00080010002000400080000B
2E7DA112>I<000600000006000000060000000600000006000000060000000600000006
000000060000000600000006000000060000000600000006000000060000FFFFFFF0FFFF
FFF000060000000600000006000000060000000600000006000000060000000600000006
00000006000000060000000600000006000000060000000600001C207D9A23>43
D<70F8FCFC74040404080810102040060E7C840D>I<FFC0FFC00A027F8A0F>I<70F8F8F8
7005057C840D>I<03F0000E1C001C0E00180600380700700380700380700380700380F0
03C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F0
03C07003807003807003807807803807001806001C0E000E1C0003F000121F7E9D17>48
D<018003800F80F380038003800380038003800380038003800380038003800380038003
80038003800380038003800380038003800380038007C0FFFE0F1E7C9D17>I<03F0000C
1C00100E00200700400780800780F007C0F803C0F803C0F803C02007C00007C000078000
0780000F00000E00001C0000380000700000600000C0000180000300000600400C004018
00401000803FFF807FFF80FFFF80121E7E9D17>I<03F0000C1C00100E00200F00780F80
780780780780380F80000F80000F00000F00000E00001C0000380003F000003C00000E00
000F000007800007800007C02007C0F807C0F807C0F807C0F00780400780400F00200E00
1C3C0003F000121F7E9D17>I<000600000600000E00000E00001E00002E00002E00004E
00008E00008E00010E00020E00020E00040E00080E00080E00100E00200E00200E00400E
00C00E00FFFFF0000E00000E00000E00000E00000E00000E00000E0000FFE0141E7F9D17
>I<1803001FFE001FFC001FF8001FE00010000010000010000010000010000010000011
F000161C00180E001007001007800003800003800003C00003C00003C07003C0F003C0F0
03C0E00380400380400700200600100E000C380003E000121F7E9D17>I<007C00018200
0701000E03800C07801C0780380300380000780000700000700000F1F000F21C00F40600
F80700F80380F80380F003C0F003C0F003C0F003C0F003C07003C07003C0700380380380
3807001807000C0E00061C0001F000121F7E9D17>I<4000007FFFC07FFF807FFF804001
0080020080020080040000080000080000100000200000200000400000400000C00000C0
0001C0000180000380000380000380000380000780000780000780000780000780000780
00078000030000121F7D9D17>I<03F0000C0C0010060030030020018060018060018060
01807001807803003E03003F06001FC8000FF00003F80007FC000C7E00103F00300F8060
03804001C0C001C0C000C0C000C0C000C0C000806001802001001002000C0C0003F00012
1F7E9D17>I<03F0000E18001C0C00380600380700700700700380F00380F00380F003C0
F003C0F003C0F003C0F003C07007C07007C03807C0180BC00E13C003E3C0000380000380
000380000700300700780600780E00700C002018001070000FC000121F7E9D17>I<70F8
F8F8700000000000000000000070F8F8F87005147C930D>I<0001000000038000000380
00000380000007C0000007C0000007C0000009E0000009E0000009E0000010F0000010F0
000010F00000207800002078000020780000403C0000403C0000403C0000801E0000801E
0000FFFE0001000F0001000F0001000F00020007800200078002000780040003C00E0003
C01F0007E0FFC03FFE1F207F9F22>65 D<FFFFE0000F80380007801E0007801F0007800F
0007800F8007800F8007800F8007800F8007800F8007800F0007801F0007801E0007803C
0007FFF00007803C0007801E0007800F0007800F8007800780078007C0078007C0078007
C0078007C0078007C00780078007800F8007800F0007801F000F803C00FFFFF0001A1F7E
9E20>I<000FC040007030C001C009C0038005C0070003C00E0001C01E0000C01C0000C0
3C0000C07C0000407C00004078000040F8000000F8000000F8000000F8000000F8000000
F8000000F8000000F8000000F8000000780000007C0000407C0000403C0000401C000040
1E0000800E000080070001000380020001C0040000703800000FC0001A217D9F21>I<FF
FFE0000F803C0007801E000780070007800380078003C0078001E0078001E0078001F007
8000F0078000F0078000F8078000F8078000F8078000F8078000F8078000F8078000F807
8000F8078000F8078000F0078000F0078000F0078001E0078001E0078003C00780038007
80070007800E000F803C00FFFFE0001D1F7E9E23>I<FFFFFF000F800F00078003000780
030007800100078001800780008007800080078000800780808007808000078080000780
80000781800007FF80000781800007808000078080000780800007808000078000200780
002007800020078000400780004007800040078000C0078000C0078001800F800F80FFFF
FF801B1F7E9E1F>I<FFFFFF000F800F0007800300078003000780010007800180078000
80078000800780008007800080078080000780800007808000078080000781800007FF80
000781800007808000078080000780800007808000078000000780000007800000078000
00078000000780000007800000078000000FC00000FFFE0000191F7E9E1E>I<FFF8FFF8
0F800F8007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F00
07800F0007800F0007800F0007800F0007FFFF0007800F0007800F0007800F0007800F00
07800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F00
07800F000F800F80FFF8FFF81D1F7E9E22>72 D<FFFC0FC0078007800780078007800780
078007800780078007800780078007800780078007800780078007800780078007800780
0780078007800FC0FFFC0E1F7F9E10>I<0FFFC0007C00003C00003C00003C00003C0000
3C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0000
3C00003C00003C00003C00003C00203C00F83C00F83C00F83C00F0380040780040700030
E0000F800012207E9E17>I<FFFE000FC000078000078000078000078000078000078000
078000078000078000078000078000078000078000078000078000078000078000078000
07800207800207800207800207800607800407800407800C07801C0F807CFFFFFC171F7E
9E1C>76 D<FF80001FF80F80001F800780001F0005C0002F0005C0002F0005C0002F0004
E0004F0004E0004F000470008F000470008F000470008F000438010F000438010F000438
010F00041C020F00041C020F00041C020F00040E040F00040E040F00040E040F00040708
0F000407080F000407080F000403900F000403900F000401E00F000401E00F000401E00F
000E00C00F001F00C01F80FFE0C1FFF8251F7E9E2A>I<FF803FF807C007C007C0038005
E0010005E0010004F001000478010004780100043C0100043C0100041E0100040F010004
0F010004078100040781000403C1000401E1000401E1000400F1000400F1000400790004
003D0004003D0004001F0004001F0004000F0004000700040007000E0003001F000300FF
E001001D1F7E9E22>I<FFFFE0000F80780007801C0007801E0007800F0007800F800780
0F8007800F8007800F8007800F8007800F8007800F0007801E0007801C000780780007FF
E00007800000078000000780000007800000078000000780000007800000078000000780
0000078000000780000007800000078000000FC00000FFFC0000191F7E9E1F>80
D<FFFF80000F80F0000780780007803C0007801E0007801E0007801F0007801F0007801F
0007801F0007801E0007801E0007803C00078078000780F00007FF80000781C0000780E0
000780F0000780700007807800078078000780780007807C0007807C0007807C0007807C
0407807E0407803E040FC01E08FFFC0F10000003E01E207E9E21>82
D<07E0800C1980100780300380600180600180E00180E00080E00080E00080F00000F000
007800007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C08001
C08001C08001C08001C0C00180C00380E00300F00600CE0C0081F80012217D9F19>I<7F
FFFFE0780F01E0600F0060400F0020400F0020C00F0030800F0010800F0010800F001080
0F0010000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
0F0000000F0000001F800007FFFE001C1F7E9E21>I<FFFC3FF80FC007C0078003800780
010007800100078001000780010007800100078001000780010007800100078001000780
010007800100078001000780010007800100078001000780010007800100078001000780
01000780010007800100038002000380020001C0020001C0040000E00800007018000038
2000000FC0001D207E9E22>I<FFF003FE1F8000F80F0000600F80006007800040078000
4003C0008003C0008003C0008001E0010001E0010001F0010000F0020000F0020000F806
000078040000780400003C0800003C0800003C0800001E1000001E1000001F3000000F20
00000F20000007C0000007C0000007C000000380000003800000038000000100001F207F
9E22>I<FFF07FF81FF01F800FC007C00F00078003800F00078001000F0007C001000780
07C00200078007C00200078007C0020003C009E0040003C009E0040003C009E0040003E0
10F00C0001E010F0080001E010F0080001F02078080000F02078100000F02078100000F0
403C10000078403C20000078403C20000078C03E2000003C801E4000003C801E4000003C
801E4000001F000F8000001F000F8000001F000F8000001E00078000000E00070000000E
00070000000C000300000004000200002C207F9E2F>I<7FF83FF80FE00FC007C0070003
C0020001E0040001F00C0000F0080000781000007C1000003C2000003E4000001E400000
0F8000000F8000000780000003C0000007E0000005E0000009F0000018F8000010780000
207C0000603C0000401E0000801F0001800F0001000780020007C0070003C01F8007E0FF
E01FFE1F1F7F9E22>I<080410082010201040204020804080408040B85CFC7EFC7E7C3E
381C0F0E7B9F17>92 D<1FE000303000781800781C00300E00000E00000E00000E0000FE
00078E001E0E00380E00780E00F00E10F00E10F00E10F01E10781E103867200F83C01414
7E9317>97 D<0E0000FE00000E00000E00000E00000E00000E00000E00000E00000E0000
0E00000E00000E3E000EC3800F01C00F00E00E00E00E00700E00700E00780E00780E0078
0E00780E00780E00780E00700E00700E00E00F00E00D01C00CC300083E0015207F9F19>
I<03F80E0C1C1E381E380C70007000F000F000F000F000F000F00070007000380138011C
020E0C03F010147E9314>I<000380003F80000380000380000380000380000380000380
00038000038000038000038003E380061B801C0780380380380380700380700380F00380
F00380F00380F00380F00380F003807003807003803803803807801C07800E1B8003E3F8
15207E9F19>I<03F0000E1C001C0E00380700380700700700700380F00380F00380FFFF
80F00000F00000F000007000007000003800801800800C010007060001F80011147F9314
>I<007C00C6018F038F07060700070007000700070007000700FFF00700070007000700
070007000700070007000700070007000700070007000700070007007FF01020809F0E>
I<0000E003E3300E3C301C1C30380E00780F00780F00780F00780F00780F00380E001C1C
001E380033E0002000002000003000003000003FFE001FFF800FFFC03001E0600070C000
30C00030C00030C000306000603000C01C038003FC00141F7F9417>I<0E0000FE00000E
00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E3E000E43000E
81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E
01C00E01C00E01C00E01C00E01C0FFE7FC16207F9F19>I<1C001E003E001E001C000000
000000000000000000000E007E000E000E000E000E000E000E000E000E000E000E000E00
0E000E000E000E000E000E00FFC00A1F809E0C>I<00E001F001F001F000E00000000000
00000000000000007007F000F00070007000700070007000700070007000700070007000
700070007000700070007000700070007000706070F060F0C061803F000C28829E0E>I<
0E00FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
0E000E000E000E000E000E000E000E000E000E000E000E000E00FFE00B20809F0C>108
D<0E1F01F000FE618618000E81C81C000F00F00E000F00F00E000E00E00E000E00E00E00
0E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E
00E00E000E00E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE023147F9326>I<
0E3E00FE43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0
0E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC16147F9319>I<01F800070E
001C03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000
E07000E03801C03801C01C0380070E0001F80014147F9317>I<0E3E00FEC3800F01C00F
00E00E00E00E00F00E00700E00780E00780E00780E00780E00780E00780E00700E00F00E
00E00F01E00F01C00EC3000E3E000E00000E00000E00000E00000E00000E00000E00000E
0000FFE000151D7F9319>I<03E0800619801C05803C0780380380780380700380F00380
F00380F00380F00380F00380F003807003807803803803803807801C0B800E138003E380
000380000380000380000380000380000380000380000380003FF8151D7E9318>I<0E78
FE8C0F1E0F1E0F0C0E000E000E000E000E000E000E000E000E000E000E000E000E000E00
FFE00F147F9312>I<1F9030704030C010C010C010E00078007F803FE00FF00070803880
188018C018C018E030D0608F800D147E9312>I<020002000200060006000E000E003E00
FFF80E000E000E000E000E000E000E000E000E000E000E000E080E080E080E080E080610
031001E00D1C7F9B12>I<0E01C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E
01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC16
147F9319>I<FF83F81E01E01C00C00E00800E00800E0080070100070100038200038200
03820001C40001C40001EC0000E80000E80000700000700000700000200015147F9318>
I<FF9FE1FC3C0780701C0300601C0380200E0380400E0380400E03C0400707C0800704C0
800704E080038861000388710003C8730001D0320001D03A0000F03C0000E01C0000E01C
0000601800004008001E147F9321>I<7FC3FC0F01E00701C007018003810001C20000E4
0000EC00007800003800003C00007C00004E000087000107000303800201C00601E01E01
E0FF07FE1714809318>I<FF83F81E01E01C00C00E00800E00800E008007010007010003
820003820003820001C40001C40001EC0000E80000E80000700000700000700000200000
2000004000004000004000F08000F08000F100006200003C0000151D7F9318>I<3FFF38
0E200E201C40384078407000E001E001C00380078007010E011E011C0338027006700EFF
FE10147F9314>I E /Fl 38 122 df<000FE000007FF80000F81C0001E07C0003E07C00
07C07C0007C07C0007C0380007C0000007C0000007C0000007C1FE00FFFFFE00FFFFFE00
07C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E00
07C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E003FF9FFC03FF9FFC0
1A20809F1D>12 D<00E00001E0000FE000FFE000F3E00003E00003E00003E00003E00003
E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003
E00003E00003E00003E00003E00003E000FFFF80FFFF80111D7C9C1A>49
D<07F0001FFE00383F007C1F80FE0FC0FE0FC0FE0FE0FE07E07C07E03807E0000FE0000F
C0000FC0001F80001F00003E0000780000F00000E00001C0000380600700600E00601C00
E01FFFC03FFFC07FFFC0FFFFC0FFFFC0131D7D9C1A>I<01FC0007FF000E0F801E0FC03F
07E03F07E03F07E03F07E01E0FC0000FC0000F80001F0001FC0001FC00000F800007C000
03E00003F00003F83803F87C03F8FE03F8FE03F8FE03F0FC03F07807E03C0FC01FFF8003
FC00151D7E9C1A>I<0001C00003C00007C00007C0000FC0001FC0003BC00073C00063C0
00C3C00183C00383C00703C00E03C00C03C01803C03803C07003C0E003C0FFFFFEFFFFFE
0007C00007C00007C00007C00007C00007C000FFFE00FFFE171D7F9C1A>I<3803803FFF
803FFF003FFE003FFC003FF0003F800030000030000030000030000033F80037FE003C1F
00380F801007C00007C00007E00007E07807E0FC07E0FC07E0FC07E0FC07C0780FC0600F
80381F001FFC0007F000131D7D9C1A>I<003F0001FFC007E0E00F81E01F03F01E03F03E
03F07C03F07C01E07C0000FC1000FCFF00FDFFC0FD03E0FE01F0FE01F0FC01F8FC01F8FC
01F8FC01F87C01F87C01F87C01F83C01F03E01F01E03E00F07C007FF8001FE00151D7E9C
1A>I<6000007FFFF87FFFF87FFFF07FFFE07FFFC0E00180C00300C00300C00600000C00
00180000380000380000780000700000F00000F00001F00001F00001F00001F00003F000
03F00003F00003F00003F00003F00001E00000C000151E7D9D1A>I<01FC0007FF000F07
801E03C01C01E03C01E03C01E03E01E03F01E03FC3C01FE3801FFF000FFE0007FF8007FF
C01FFFE03C3FF0780FF07803F8F001F8F000F8F00078F00078F000707800707C00E03E03
C00FFF8003FC00151D7E9C1A>I<0000E000000000E000000001F000000001F000000001
F000000003F800000003F800000006FC00000006FC0000000EFE0000000C7E0000000C7E
000000183F000000183F000000303F800000301F800000701FC00000600FC00000600FC0
0000C007E00000FFFFE00001FFFFF000018003F000018003F000030001F800030001F800
060001FC00060000FC000E0000FE00FFE00FFFE0FFE00FFFE0231F7E9E28>65
D<FFFFFE00FFFFFFC007C007E007C003F007C001F807C001FC07C001FC07C001FC07C001
FC07C001FC07C001F807C003F807C007F007C00FE007FFFF8007FFFFC007C003F007C001
F807C001FC07C000FC07C000FE07C000FE07C000FE07C000FE07C000FE07C000FC07C001
FC07C003F807C007F0FFFFFFE0FFFFFF001F1F7E9E25>I<0007FC02003FFF0E00FE03DE
03F000FE07E0003E0FC0001E1F80001E3F00000E3F00000E7F0000067E0000067E000006
FE000000FE000000FE000000FE000000FE000000FE000000FE0000007E0000007E000006
7F0000063F0000063F00000C1F80000C0FC0001807E0003803F0007000FE01C0003FFF80
0007FC001F1F7D9E26>I<FFFFFFE0FFFFFFE007E007E007E001E007E000E007E0006007
E0007007E0003007E0003007E0603007E0603007E0600007E0E00007E1E00007FFE00007
FFE00007E1E00007E0E00007E0600007E0600C07E0600C07E0000C07E0001807E0001807
E0001807E0003807E0007807E000F807E003F0FFFFFFF0FFFFFFF01E1F7E9E22>69
D<FFFFFFFF07E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007
E007E007E007E007E007E007E007E007E007E007E007E0FFFFFFFF101F7E9E14>73
D<FFFF8000FFFF800007E0000007E0000007E0000007E0000007E0000007E0000007E000
0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
0007E0000007E000C007E000C007E000C007E001C007E001C007E001C007E0038007E003
8007E00F8007E01F80FFFFFF80FFFFFF801A1F7E9E1F>76 D<FFE000003FF8FFF000007F
F807F000007F0006F80000DF0006F80000DF0006F80000DF00067C00019F00067C00019F
00063E00031F00063E00031F00061F00061F00061F00061F00060F800C1F00060F800C1F
000607C0181F000607C0181F000607C0181F000603E0301F000603E0301F000601F0601F
000601F0601F000600F8C01F000600F8C01F0006007D801F0006007D801F0006003F001F
0006003F001F0006003F001F0006001E001F00FFF01E03FFF8FFF00C03FFF82D1F7E9E32
>I<FFFFFE00FFFFFF8007E00FE007E003F007E001F807E001F807E001FC07E001FC07E0
01FC07E001FC07E001FC07E001F807E001F807E003F007E00FE007FFFF8007FFFE0007E0
000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0
000007E0000007E00000FFFF0000FFFF00001E1F7E9E24>80 D<7FFFFFFC7FFFFFFC7C07
E07C7007E01C6007E00C6007E00CE007E00EC007E006C007E006C007E006C007E0060007
E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007
E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00003FFFFC003FF
FFC01F1E7E9D24>84 D<07FC001FFF003F0F803F07C03F03E03F03E00C03E00003E0007F
E007FBE01F03E03C03E07C03E0F803E0F803E0F803E0FC05E07E0DE03FF8FE0FE07E1714
7F9319>97 D<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F0000
1F00001F00001F1FC01F7FF01FE0F81F807C1F007E1F003E1F003E1F003F1F003F1F003F
1F003F1F003F1F003F1F003E1F003E1F007C1F807C1EC1F81C7FE0181F8018207E9F1D>
I<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC00
00FC00007C00007E00003E00603F00C01F81C007FF0001FC0013147E9317>I<0007F800
07F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F801F8F80F
FEF81F83F83E01F87E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C
00F87C00F87E00F83E01F81F07F80FFEFF03F8FF18207E9F1D>I<01FE0007FF800F83C0
1E01E03E00F07C00F07C00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C0000
3E00181E00180F807007FFE000FF8015147F9318>I<01FC3C07FFFE0F079E1E03DE3E03
E03E03E03E03E03E03E03E03E01E03C00F07800FFF0009FC001800001800001C00001FFF
800FFFF007FFF81FFFFC3C007C70003EF0001EF0001EF0001E78003C78003C3F01F80FFF
E001FF00171E7F931A>103 D<FF0000FF00001F00001F00001F00001F00001F00001F00
001F00001F00001F00001F00001F0FC01F3FE01F61F01FC0F81F80F81F00F81F00F81F00
F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3
FF18207D9F1D>I<1C003E007F007F007F003E001C00000000000000000000000000FF00
FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0
FFE00B217EA00E>I<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FF
E00B207E9F0E>108 D<FE0FE03F80FE1FF07FC01E70F9C3E01E407D01F01E807E01F01F
807E01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F00
7C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F0FFE3FF8FFEFFE3FF
8FFE27147D932C>I<FE0FC0FE3FE01E61F01EC0F81E80F81F00F81F00F81F00F81F00F8
1F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3FF18147D
931D>I<01FF0007FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007EFC00
7EFC007EFC007E7C007C7C007C3E00F83E00F81F83F007FFC001FF0017147F931A>I<FF
1FC0FF7FF01FE1F81F80FC1F007E1F007E1F003E1F003F1F003F1F003F1F003F1F003F1F
003F1F003E1F007E1F007C1F80FC1FC1F81F7FE01F1F801F00001F00001F00001F00001F
00001F00001F0000FFE000FFE000181D7E931D>I<01F81807FE381F87783F01F83E01F8
7E00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87E00F87E00F83F01F8
1F87F80FFEF803F8F80000F80000F80000F80000F80000F80000F80000F80007FF0007FF
181D7E931C>I<FE3E00FE7F801ECFC01E8FC01E8FC01F8FC01F03001F00001F00001F00
001F00001F00001F00001F00001F00001F00001F00001F0000FFF000FFF00012147E9316
>I<0FE63FFE701E600EE006E006F800FFC07FF83FFC1FFE03FE001FC007C007E007F006
F81EFFFCC7F010147E9315>I<01800180018003800380038007800F803F80FFFCFFFC0F
800F800F800F800F800F800F800F800F800F800F860F860F860F860F8607CC03F801F00F
1D7F9C14>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8
1F00F81F00F81F00F81F00F81F00F81F01F81F01F80F06F807FCFF03F8FF18147D931D>
I<FFE07F80FFE07F801F001C000F8018000F80180007C0300007C0300003E0600003E060
0001F0C00001F0C00001F9C00000F9800000FF8000007F0000007F0000003E0000003E00
00001C0000001C000019147F931C>I<FFE07F80FFE07F801F001C000F8018000F801800
07C0300007C0300003E0600003E0600001F0C00001F0C00001F9C00000F9800000FF8000
007F0000007F0000003E0000003E0000001C0000001C0000001800000018000078300000
FC300000FC600000C0E00000E1C000007F8000001E000000191D7F931C>121
D E /Fm 27 122 df<00000007FF800000000001FFFFF0000000000FFFFFFC000000003F
FFFFFE00000000FFFC00FF00000001FFC0003F80000007FF00007FC000000FFE0001FFC0
00001FFC0001FFE000001FF80003FFE000003FF00003FFE000003FF00003FFE000007FE0
0003FFE000007FE00003FFE000007FE00003FFE000007FE00003FFE000007FE00001FFC0
00007FE00000FF8000007FE000003E0000007FE00000000000007FE00000000000007FE0
0000000000007FE00000000000007FE00000000000007FE00000000000007FE0003FFFF0
00FFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFF
FFFFFFF000007FF00000FFF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF0003FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFF
E03FFFFFE03FFFFFE03B487EC742>12 D<FFFFFFFFFFFFE00000FFFFFFFFFFFFFE0000FF
FFFFFFFFFFFFC000FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFF800001FFF800001FFFE0000
1FFF8000007FFF00001FFF8000003FFF80001FFF8000001FFFC0001FFF8000000FFFC000
1FFF80000007FFE0001FFF80000007FFF0001FFF80000007FFF0001FFF80000003FFF000
1FFF80000003FFF8001FFF80000003FFF8001FFF80000003FFF8001FFF80000003FFF800
1FFF80000003FFF8001FFF80000003FFF8001FFF80000003FFF8001FFF80000003FFF800
1FFF80000003FFF0001FFF80000007FFF0001FFF80000007FFE0001FFF8000000FFFE000
1FFF8000000FFFC0001FFF8000001FFF80001FFF8000003FFF00001FFF8000007FFE0000
1FFF800001FFFC00001FFF800007FFF000001FFFFFFFFFFFC000001FFFFFFFFFFE000000
1FFFFFFFFFFF8000001FFFFFFFFFFFF000001FFF800000FFFC00001FFF8000003FFF0000
1FFF8000000FFFC0001FFF80000007FFE0001FFF80000003FFF0001FFF80000003FFF800
1FFF80000001FFF8001FFF80000001FFFC001FFF80000000FFFC001FFF80000000FFFE00
1FFF80000000FFFE001FFF80000000FFFE001FFF80000000FFFF001FFF800000007FFF00
1FFF800000007FFF001FFF800000007FFF001FFF800000007FFF001FFF80000000FFFF00
1FFF80000000FFFF001FFF80000000FFFF001FFF80000000FFFE001FFF80000000FFFE00
1FFF80000001FFFE001FFF80000001FFFC001FFF80000003FFFC001FFF80000007FFF800
1FFF80000007FFF0001FFF8000001FFFE0001FFF8000003FFFE0001FFF800001FFFF80FF
FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFC000FF
FFFFFFFFFFF8000048477CC654>66 D<000000003FFE00000E0000000FFFFFC0001E0000
007FFFFFF8003E000003FFFFFFFE00FE00000FFFFFFFFF81FE00003FFFF800FFC3FE0000
FFFF80000FF7FE0001FFFC000003FFFE0007FFF0000001FFFE000FFFC00000007FFE001F
FF800000003FFE003FFF000000001FFE007FFE000000000FFE00FFFC0000000007FE01FF
F80000000007FE03FFF00000000003FE03FFF00000000001FE07FFE00000000001FE07FF
E00000000000FE0FFFC00000000000FE0FFFC000000000007E1FFFC000000000007E1FFF
8000000000007E3FFF8000000000007E3FFF8000000000003E3FFF8000000000003E7FFF
8000000000003E7FFF0000000000003E7FFF000000000000007FFF00000000000000FFFF
00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF
00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF
00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF
000000000000007FFF000000000000007FFF000000000000007FFF000000000000007FFF
8000000000003E3FFF8000000000003E3FFF8000000000003E3FFF8000000000003E1FFF
8000000000003E1FFFC000000000003E0FFFC000000000007C0FFFC000000000007C07FF
E000000000007C07FFE00000000000F803FFF00000000000F803FFF00000000001F801FF
F80000000001F000FFFC0000000003E0007FFE0000000007E0003FFF000000000FC0001F
FF800000001F80000FFFC00000003F000007FFF0000000FE000001FFFC000001FC000000
FFFF80000FF80000003FFFF8007FF00000000FFFFFFFFFC000000003FFFFFFFF00000000
007FFFFFFC00000000000FFFFFE00000000000003FFE000000474979C756>I<FFFFFFFF
FFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFF
FFFFFFFF00001FFFC00001FFFF00001FFFC000001FFF00001FFFC0000007FF00001FFFC0
000003FF00001FFFC0000000FF00001FFFC00000007F00001FFFC00000007F00001FFFC0
0000003F00001FFFC00000003F80001FFFC00000001F80001FFFC00000001F80001FFFC0
0000001F80001FFFC00000000F80001FFFC00000000F80001FFFC0007C000F80001FFFC0
007C000F80001FFFC0007C0007C0001FFFC0007C0007C0001FFFC0007C0007C0001FFFC0
007C0007C0001FFFC000FC000000001FFFC000FC000000001FFFC000FC000000001FFFC0
01FC000000001FFFC003FC000000001FFFC01FFC000000001FFFFFFFFC000000001FFFFF
FFFC000000001FFFFFFFFC000000001FFFFFFFFC000000001FFFFFFFFC000000001FFFC0
1FFC000000001FFFC003FC000000001FFFC001FC000000001FFFC000FC000000001FFFC0
00FC000000001FFFC000FC000000001FFFC0007C00007C001FFFC0007C00007C001FFFC0
007C00007C001FFFC0007C0000F8001FFFC0007C0000F8001FFFC0007C0000F8001FFFC0
00000000F8001FFFC000000001F8001FFFC000000001F0001FFFC000000001F0001FFFC0
00000001F0001FFFC000000003F0001FFFC000000003F0001FFFC000000007F0001FFFC0
00000007E0001FFFC00000000FE0001FFFC00000001FE0001FFFC00000003FE0001FFFC0
0000007FE0001FFFC0000000FFE0001FFFC0000003FFC0001FFFC000000FFFC0001FFFC0
0000FFFFC0FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFF80FFFFFFFF
FFFFFFFF80FFFFFFFFFFFFFFFF8046467CC54E>69 D<FFFFFFFFFEFFFFFFFFFEFFFFFFFF
FEFFFFFFFFFEFFFFFFFFFE000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000
000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE00000
0FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000F
FFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFF
E000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE0
00000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000
000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE00000
0FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000F
FFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000FFFFFFFFFEFFFFFF
FFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE27477DC62D>73 D<FFFFFFFFFF000000FFFFFF
FFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000001FFFC0000000
00001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFF
C000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC0000000
00001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFF
C000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC0000000
00001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFF
C000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC0000000
00001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFF
C000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC0000000
00001FFFC000000000001FFFC0000000F8001FFFC0000000F8001FFFC0000000F8001FFF
C0000000F8001FFFC0000001F0001FFFC0000001F0001FFFC0000001F0001FFFC0000001
F0001FFFC0000001F0001FFFC0000003F0001FFFC0000003F0001FFFC0000003F0001FFF
C0000007F0001FFFC0000007F0001FFFC000000FE0001FFFC000001FE0001FFFC000001F
E0001FFFC000003FE0001FFFC000007FE0001FFFC00000FFE0001FFFC00003FFE0001FFF
C0000FFFE0001FFFC0007FFFE0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFF
C0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC03D477CC647>76 D<FFFFFFE0000000000003FF
FFFFFFFFFFF0000000000007FFFFFFFFFFFFF0000000000007FFFFFFFFFFFFF800000000
000FFFFFFFFFFFFFF800000000000FFFFFFF001FFFF800000000000FFFF800001FFFFC00
000000001EFFF800001FFFFC00000000001EFFF800001FBFFE00000000003CFFF800001F
BFFE00000000003CFFF800001F9FFF000000000078FFF800001F9FFF000000000078FFF8
00001F8FFF8000000000F0FFF800001F8FFF8000000000F0FFF800001F87FFC000000001
E0FFF800001F87FFC000000001E0FFF800001F87FFC000000001E0FFF800001F83FFE000
000003C0FFF800001F83FFE000000003C0FFF800001F81FFF00000000780FFF800001F81
FFF00000000780FFF800001F80FFF80000000F00FFF800001F80FFF80000000F00FFF800
001F807FFC0000001E00FFF800001F807FFC0000001E00FFF800001F807FFC0000001E00
FFF800001F803FFE0000003C00FFF800001F803FFE0000003C00FFF800001F801FFF0000
007800FFF800001F801FFF0000007800FFF800001F800FFF800000F000FFF800001F800F
FF800000F000FFF800001F8007FFC00001E000FFF800001F8007FFC00001E000FFF80000
1F8003FFE00003C000FFF800001F8003FFE00003C000FFF800001F8003FFE00003C000FF
F800001F8001FFF000078000FFF800001F8001FFF000078000FFF800001F8000FFF8000F
0000FFF800001F8000FFF8000F0000FFF800001F80007FFC001E0000FFF800001F80007F
FC001E0000FFF800001F80003FFE003C0000FFF800001F80003FFE003C0000FFF800001F
80001FFF00780000FFF800001F80001FFF00780000FFF800001F80001FFF00780000FFF8
00001F80000FFF80F00000FFF800001F80000FFF80F00000FFF800001F800007FFC1E000
00FFF800001F800007FFC1E00000FFF800001F800003FFE3C00000FFF800001F800003FF
E3C00000FFF800001F800001FFF7800000FFF800001F800001FFF7800000FFF800001F80
0001FFF7800000FFF800001F800000FFFF000000FFF800001F800000FFFF000000FFF800
001F8000007FFE000000FFF800001F8000007FFE000000FFF800001F8000003FFC000000
FFF800001F8000003FFC000000FFF800001F8000001FF8000000FFF800001F8000001FF8
000000FFF800007FE000000FF0000000FFF800FFFFFFF0000FF00007FFFFFFFFFFFFFFF0
000FF00007FFFFFFFFFFFFFFF00007E00007FFFFFFFFFFFFFFF00007E00007FFFFFFFFFF
FFFFF00003C00007FFFFFFFF68477CC671>I<FFFFFFFFFFFF800000FFFFFFFFFFFFFC00
00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFC000FFFFFFFFFFFFFFF000001FFF80000FFFFC
00001FFF800001FFFE00001FFF8000007FFF00001FFF8000003FFF80001FFF8000001FFF
C0001FFF8000000FFFC0001FFF8000000FFFE0001FFF8000000FFFE0001FFF80000007FF
F0001FFF80000007FFF0001FFF80000007FFF0001FFF80000007FFF8001FFF80000007FF
F8001FFF80000007FFF8001FFF80000007FFF8001FFF80000007FFF8001FFF80000007FF
F8001FFF80000007FFF8001FFF80000007FFF8001FFF80000007FFF0001FFF80000007FF
F0001FFF80000007FFF0001FFF8000000FFFE0001FFF8000000FFFE0001FFF8000000FFF
C0001FFF8000001FFF80001FFF8000003FFF80001FFF8000007FFF00001FFF800001FFFE
00001FFF80000FFFF800001FFFFFFFFFFFF000001FFFFFFFFFFFC000001FFFFFFFFFFE00
00001FFFFFFFFFF00000001FFFC00000000000001FFFC00000000000001FFFC000000000
00001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC000000000
00001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC000000000
00001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC000000000
00001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC000000000
00001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC000000000
00001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC000000000
00FFFFFFFFF800000000FFFFFFFFF800000000FFFFFFFFF800000000FFFFFFFFF8000000
00FFFFFFFFF80000000045477CC651>80 D<3FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFF
FF003FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFF0003
FFF8003FFF007FF80003FFF80007FF807FE00003FFF80001FF807FC00003FFF80000FF80
7F800003FFF800007F807F000003FFF800003F807F000003FFF800003F807E000003FFF8
00001F807E000003FFF800001F807E000003FFF800000F807C000003FFF800000F807C00
0003FFF800000F807C000003FFF800000F807C000003FFF800000F80FC000003FFF80000
0FC0F8000003FFF8000007C0F8000003FFF8000007C0F8000003FFF8000007C0F8000003
FFF8000007C0F8000003FFF8000007C000000003FFF80000000000000003FFF800000000
00000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8
0000000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000
0003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000
000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003
FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000
00000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8
0000000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000
0003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000
000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003
FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000
00000003FFF80000000000000003FFF8000000000003FFFFFFFFFFF800000003FFFFFFFF
FFF800000003FFFFFFFFFFF800000003FFFFFFFFFFF800000003FFFFFFFFFFF800004A46
7CC553>84 D<0007FFFC000000007FFFFFC0000001FFFFFFF8000003FFFFFFFE000007FE
001FFF000007FF0003FFC0000FFF8001FFE0000FFF8000FFF0000FFF80007FF0000FFF80
007FF8000FFF80007FF80007FF00003FFC0007FF00003FFC0003FE00003FFC0000F80000
3FFC00000000003FFC00000000003FFC00000000003FFC00000000003FFC00000007FFFF
FC000000FFFFFFFC000007FFFFFFFC00003FFFE03FFC0000FFFE003FFC0003FFF0003FFC
0007FFC0003FFC000FFF00003FFC001FFE00003FFC003FFC00003FFC007FF800003FFC00
7FF800003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FF
F000003FFC00FFF000007FFC007FF80000FFFC007FF80001EFFC003FFC0003EFFC003FFF
0007CFFF000FFFC03F8FFFF807FFFFFF07FFFC01FFFFFC03FFFC007FFFF001FFFC0003FF
80007FF8362E7DAD3A>97 D<00001FFFC0000000FFFFF8000007FFFFFE00001FFFFFFF80
007FFC00FFC000FFE001FFC001FFC003FFE003FF8003FFE007FF0003FFE00FFE0003FFE0
0FFE0003FFE01FFC0001FFC01FFC0001FFC03FFC0000FF803FFC00003E007FF800000000
7FF8000000007FF800000000FFF800000000FFF800000000FFF800000000FFF800000000
FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
7FF8000000007FF8000000007FFC000000003FFC000000003FFC000000001FFC000000F8
1FFE000000F80FFE000000F80FFF000001F007FF800003F003FFC00007E001FFE0000FC0
00FFF0001F80007FFE00FF00001FFFFFFE000007FFFFF8000000FFFFE00000001FFE0000
2D2E7CAD35>99 D<00000000007FC00000000000FFFFC00000000000FFFFC00000000000
FFFFC00000000000FFFFC00000000000FFFFC0000000000003FFC0000000000001FFC000
0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000000000
01FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000
0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000000000
01FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000
00000FFC01FFC0000000FFFF81FFC0000007FFFFE1FFC000001FFFFFF9FFC000007FFC03
FFFFC00000FFF0007FFFC00001FFC0001FFFC00003FF80000FFFC00007FF000007FFC000
0FFE000003FFC0000FFE000003FFC0001FFC000003FFC0001FFC000003FFC0003FFC0000
03FFC0003FFC000003FFC0007FF8000003FFC0007FF8000003FFC0007FF8000003FFC000
FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF80000
03FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000
FFF8000003FFC0007FF8000003FFC0007FF8000003FFC0007FF8000003FFC0003FF80000
03FFC0003FFC000003FFC0003FFC000003FFC0001FFC000003FFC0001FFC000003FFC000
0FFE000007FFC00007FF00000FFFC00003FF00001FFFC00001FFC0003FFFC00000FFE000
FFFFE000007FF807FBFFFF80001FFFFFF3FFFF800007FFFFC3FFFF800001FFFF03FFFF80
00001FF803FFFF8039487CC742>I<00001FFE00000001FFFFE0000007FFFFF800001FFF
FFFE00007FFC07FF0000FFE001FF8001FFC0007FC003FF80003FE007FF00003FF00FFE00
001FF01FFE00000FF81FFC00000FF83FFC00000FFC3FFC000007FC7FFC000007FC7FF800
0007FC7FF8000007FE7FF8000007FEFFF8000007FEFFF8000007FEFFFFFFFFFFFEFFFFFF
FFFFFEFFFFFFFFFFFEFFFFFFFFFFFCFFF800000000FFF800000000FFF800000000FFF800
0000007FF8000000007FF8000000007FFC000000003FFC000000003FFC000000003FFC00
00001C1FFE0000003E0FFE0000003E07FF0000007E07FF000000FC03FF800001F801FFC0
0003F0007FF0001FE0003FFE00FFC0001FFFFFFF800007FFFFFE000000FFFFF80000000F
FF80002F2E7DAD36>I<00000000001F8000007FF000FFE00007FFFF03FFF0001FFFFFC7
FFF0007FFFFFFFC7F800FFE03FFE0FF801FF800FFC0FF803FF0007FE0FF807FE0003FF07
F007FE0003FF07F00FFC0001FF81C00FFC0001FF80000FFC0001FF80001FFC0001FFC000
1FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0000F
FC0001FF80000FFC0001FF80000FFC0001FF800007FE0003FF000007FE0003FF000003FF
0007FE000001FF800FFC000000FFE03FF8000001FFFFFFF0000001DFFFFFC0000003C7FF
FF00000003C07FF000000007C0000000000007C0000000000007C0000000000007C00000
00000007E0000000000007F0000000000007F8000000000007FFFFFFF0000007FFFFFFFF
000003FFFFFFFFE00003FFFFFFFFF80001FFFFFFFFFE0001FFFFFFFFFF0000FFFFFFFFFF
80007FFFFFFFFF8003FFFFFFFFFFC00FFFFFFFFFFFC01FF800001FFFE03FE0000001FFE0
7FC00000007FF07FC00000003FF0FF800000001FF0FF800000001FF0FF800000001FF0FF
800000001FF0FF800000001FF07FC00000003FE07FC00000003FE03FE00000007FC03FF0
000000FFC01FFC000003FF800FFF00000FFF0003FFF000FFFC0000FFFFFFFFF000003FFF
FFFFC0000007FFFFFE000000003FFFC0000035447DAE3B>103 D<00FC0001FE0003FF00
07FF800FFFC01FFFE01FFFE01FFFE01FFFE01FFFE01FFFE00FFFC007FF8003FF0001FE00
00FC00000000000000000000000000000000000000000000000000000000000000000000
007FC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC003FFC001FFC001FFC001FFC001FFC001FFC0
01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0
01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0
01FFC001FFC001FFC001FFC001FFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18497CC820>
105 D<007FC000FFFFC000FFFFC000FFFFC000FFFFC000FFFFC00003FFC00001FFC00001
FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
FFC00001FFC00001FFC00001FFC00001FFC000FFFFFF80FFFFFF80FFFFFF80FFFFFF80FF
FFFF8019487CC720>108 D<007FC001FFC00000FFE00000FFFFC00FFFF80007FFFC0000
FFFFC03FFFFE001FFFFF0000FFFFC0FFFFFF007FFFFF8000FFFFC1FC07FF80FE03FFC000
FFFFC3E003FFC1F001FFE00003FFC7C001FFC3E000FFE00001FFCF0001FFE78000FFF000
01FFDE0000FFEF00007FF00001FFDC0000FFEE00007FF00001FFFC0000FFFE00007FF800
01FFF80000FFFC00007FF80001FFF00000FFF800007FF80001FFF00000FFF800007FF800
01FFF00000FFF800007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800
01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800
01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800
01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800
01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800
01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800
01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800
01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800
01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800
FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0
FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF05C2E7CAD63>I<007FC001FF
C00000FFFFC00FFFF80000FFFFC03FFFFE0000FFFFC0FFFFFF0000FFFFC1FC07FF8000FF
FFC3E003FFC00003FFC7C001FFC00001FFCF0001FFE00001FFDE0000FFE00001FFDC0000
FFE00001FFFC0000FFF00001FFF80000FFF00001FFF00000FFF00001FFF00000FFF00001
FFF00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000
FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001
FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000
FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001
FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000
FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000FF
FFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07F
FFFFE03B2E7CAD42>I<00000FFF0000000000FFFFF000000007FFFFFE0000001FFFFFFF
8000003FFC03FFC00000FFE0007FF00001FF80001FF80003FF00000FFC0007FE000007FE
000FFE000007FF000FFC000003FF001FFC000003FF803FFC000003FFC03FF8000001FFC0
3FF8000001FFC07FF8000001FFE07FF8000001FFE07FF8000001FFE0FFF8000001FFF0FF
F8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8
000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF07FF8000001FFE07FF800
0001FFE07FF8000001FFE07FF8000001FFE03FFC000003FFC03FFC000003FFC01FFC0000
03FF801FFE000007FF800FFE000007FF0007FF00000FFE0003FF80001FFC0001FFC0003F
F80000FFE0007FF000007FFC03FFE000001FFFFFFF80000007FFFFFE00000000FFFFF000
0000000FFF000000342E7DAD3B>I<007FC00FFC000000FFFFC07FFFC00000FFFFC3FFFF
F00000FFFFCFFFFFFC0000FFFFDFF01FFF0000FFFFFF8007FF800003FFFE0001FFC00001
FFF80000FFE00001FFF00000FFF00001FFE000007FF80001FFE000003FFC0001FFE00000
3FFC0001FFE000003FFE0001FFE000001FFE0001FFE000001FFF0001FFE000001FFF0001
FFE000001FFF0001FFE000000FFF0001FFE000000FFF8001FFE000000FFF8001FFE00000
0FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001
FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF0001FFE00000
1FFF0001FFE000001FFF0001FFE000001FFE0001FFE000001FFE0001FFE000003FFC0001
FFE000003FFC0001FFE000007FF80001FFF000007FF80001FFF80000FFF00001FFFC0001
FFE00001FFFE0003FFC00001FFFF0007FF800001FFFFE03FFE000001FFEFFFFFFC000001
FFE3FFFFF0000001FFE0FFFF80000001FFE01FF800000001FFE0000000000001FFE00000
00000001FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001
FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001FFE00000
00000001FFE0000000000001FFE0000000000001FFE0000000000001FFE00000000000FF
FFFFC000000000FFFFFFC000000000FFFFFFC000000000FFFFFFC000000000FFFFFFC000
00000039427CAD42>I<00000FFC0003C0000000FFFF0007C0000007FFFFC00FC000001F
FFFFF01FC000003FFE03F81FC00000FFF000FC3FC00001FFE0003E7FC00003FFC0001F7F
C00007FF80001FFFC0000FFF00000FFFC0000FFF000007FFC0001FFE000007FFC0001FFE
000003FFC0003FFC000003FFC0003FFC000001FFC0007FFC000001FFC0007FFC000001FF
C0007FF8000001FFC000FFF8000001FFC000FFF8000001FFC000FFF8000001FFC000FFF8
000001FFC000FFF8000001FFC000FFF8000001FFC000FFF8000001FFC000FFF8000001FF
C000FFF8000001FFC000FFF8000001FFC0007FF8000001FFC0007FFC000001FFC0007FFC
000001FFC0003FFC000001FFC0003FFC000001FFC0003FFE000003FFC0001FFE000003FF
C0001FFE000007FFC0000FFF00000FFFC00007FF80001FFFC00003FF80003FFFC00001FF
C0007FFFC00000FFF000FFFFC000007FFC07FBFFC000001FFFFFE3FFC0000007FFFFC3FF
C0000001FFFF03FFC00000001FF803FFC0000000000003FFC0000000000003FFC0000000
000003FFC0000000000003FFC0000000000003FFC0000000000003FFC0000000000003FF
C0000000000003FFC0000000000003FFC0000000000003FFC0000000000003FFC0000000
000003FFC0000000000003FFC0000000000003FFC0000000000003FFC00000000001FFFF
FF8000000001FFFFFF8000000001FFFFFF8000000001FFFFFF8000000001FFFFFF803942
7CAD3F>I<00FF803F8000FFFF80FFF000FFFF83FFFC00FFFF87FFFE00FFFF8FC3FF00FF
FF8F07FF0003FF9E0FFF8001FFBC0FFF8001FFB80FFF8001FFF80FFF8001FFF00FFF8001
FFF007FF0001FFF007FF0001FFE003FE0001FFE000F80001FFE000000001FFE000000001
FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001
FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001
FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001
FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0000000FF
FFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE00000292E7CAD31>I<
000FFF00E0007FFFF3E001FFFFFFE007FFFFFFE00FF800FFE01FC0001FE03F80000FE03F
000007E07F000003E07F000003E0FF000003E0FF000003E0FF800003E0FFC0000000FFF0
000000FFFE000000FFFFF800007FFFFFC0007FFFFFF0003FFFFFFC001FFFFFFF000FFFFF
FF8007FFFFFFC003FFFFFFE000FFFFFFF0003FFFFFF00003FFFFF800001FFFF8000000FF
FC0000001FFC7800000FFCF8000007FCF8000003FCFC000003FCFC000003FCFE000003F8
FE000003F8FF000003F8FF800007F0FFC0000FF0FFF0001FE0FFFC00FFC0FFFFFFFF80FC
7FFFFE00F81FFFF800E003FF8000262E7CAD2F>I<0001F000000001F000000001F00000
0001F000000001F000000001F000000003F000000003F000000003F000000007F0000000
07F000000007F00000000FF00000000FF00000001FF00000003FF00000003FF00000007F
F0000001FFF0000003FFF000000FFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFF
FFC000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF000
0000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF00000
00FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000
FFF0000000FFF0000000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FF
F001F000FFF001F000FFF001F000FFF001F0007FF001E0007FF803E0003FF803E0003FFC
07C0001FFE0F80000FFFFF800007FFFE000001FFFC0000001FF00024427EC12E>I<007F
E000003FF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFF
F000FFFFE0007FFFF00003FFE00001FFF00001FFE00000FFF00001FFE00000FFF00001FF
E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF
F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF
E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF
F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF
E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF
F00001FFE00000FFF00001FFE00001FFF00001FFE00001FFF00001FFE00001FFF00001FF
E00003FFF00000FFE00007FFF00000FFE0000F7FF000007FE0001F7FF000007FF0003E7F
F800003FFC00FC7FFFE0001FFFFFF87FFFE00007FFFFE07FFFE00001FFFF807FFFE00000
3FFE007FFFE03B2E7CAD42>I<FFFFFF8001FFFFFFFFFF8001FFFFFFFFFF8001FFFFFFFF
FF8001FFFFFFFFFF8001FFFF01FFE000001FC001FFF000001F8001FFF000001F8000FFF8
00001F0000FFF800003F00007FF800003E00007FFC00007E00003FFC00007C00003FFE00
00FC00001FFE0000F800001FFF0001F800000FFF0001F000000FFF8003F0000007FF8003
E0000007FFC007E0000007FFC007E0000003FFE007C0000003FFE00FC0000001FFE00F80
000001FFF01F80000000FFF01F00000000FFF83F000000007FF83E000000007FFC7E0000
00003FFC7C000000003FFEFC000000001FFEF8000000001FFFF8000000001FFFF8000000
000FFFF0000000000FFFF00000000007FFE00000000007FFE00000000003FFC000000000
03FFC00000000001FF800000000001FF800000000000FF000000000000FF000000000000
7E0000000000003C000000382E7DAD3F>I<7FFFFFC000FFFF807FFFFFC000FFFF807FFF
FFC000FFFF807FFFFFC000FFFF807FFFFFC000FFFF8000FFF000000FE00000FFF800000F
C00000FFF800000FC000007FFC00000F8000007FFC00001F8000003FFC00001F0000003F
FE00003F0000001FFE00003E0000001FFF00007E0000000FFF00007C0000000FFF8000FC
00000007FF8000F800000007FFC001F800000003FFC001F000000003FFE003F000000003
FFE003F000000001FFF003E000000001FFF007E000000000FFF007C000000000FFF80FC0
000000007FF80F80000000007FFC1F80000000003FFC1F00000000003FFE3F0000000000
1FFE3E00000000001FFF7E00000000000FFF7C00000000000FFFFC00000000000FFFFC00
0000000007FFF8000000000007FFF8000000000003FFF0000000000003FFF00000000000
01FFE0000000000001FFE0000000000000FFC0000000000000FFC00000000000007F8000
00000000007F800000000000003F000000000000003F000000000000003F000000000000
003E000000000000007E000000000000007C00000000000000FC000000001F8000F80000
00003FC001F8000000007FE001F000000000FFF003F000000000FFF003E000000000FFF0
07E000000000FFF00FC000000000FFF01F8000000000FFF03F80000000007FE07F000000
00007F43FE00000000003FFFF800000000001FFFF0000000000007FFC0000000000001FE
00000000000039427EAD3F>121 D E /Fn 47 122 df<0000C018000000C018000000C0
180000018030000001803000000180300000018030000003006000000300600000030060
0000030060000003006000000600C000000600C000000600C000000600C000000C018000
FFFFFFFFC0FFFFFFFFC00018030000001803000000180300000018030000003006000000
3006000000300600000030060000FFFFFFFFC0FFFFFFFFC000600C000000C018000000C0
18000000C018000000C01800000180300000018030000001803000000180300000030060
00000300600000030060000003006000000600C000000600C000000600C00000222D7DA2
29>35 D<70F8FCFC7404040404080810102040060F7C840E>44 D<FFE0FFE00B027F8B10
>I<70F8F8F87005057C840E>I<01F000071C000C06001803003803803803807001C07001
C07001C07001C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001
E0F001E0F001E0F001E0F001E07001C07001C07001C07803C03803803803801C07000C06
00071C0001F00013227EA018>48 D<008003800F80F38003800380038003800380038003
800380038003800380038003800380038003800380038003800380038003800380038003
800380038007C0FFFE0F217CA018>I<03F8000C1E001007002007804007C07807C07803
C07807C03807C0000780000780000700000F00000E0000380003F000001C00000F000007
800007800003C00003C00003E02003E07003E0F803E0F803E0F003C04003C04007802007
80100F000C1C0003F00013227EA018>51 D<000200000600000E00000E00001E00001E00
002E00004E00004E00008E00008E00010E00020E00020E00040E00040E00080E00100E00
100E00200E00200E00400E00800E00FFFFF8000E00000E00000E00000E00000E00000E00
000E00001F0001FFF015217FA018>I<1000801E07001FFF001FFE001FF80013E0001000
0010000010000010000010000010000010F800130E001407001803801003800001C00001
C00001E00001E00001E00001E07001E0F001E0F001E0E001C08001C04003C04003802007
001006000C1C0003F00013227EA018>I<007E0001C1000300800601C00E03C01C03C018
0180380000380000780000700000700000F0F800F30C00F40600F40300F80380F801C0F0
01C0F001E0F001E0F001E0F001E0F001E07001E07001E07001E03801C03801C01803801C
03000C0600070C0001F00013227EA018>I<01F800060E000803001001802001802000C0
6000C06000C06000C07000C07801803E01003F02001FC4000FF80003F80003FC00067F00
083F80100F803007C06001C06000E0C000E0C00060C00060C00060C000606000406000C0
3000801803000E0E0003F00013227EA018>56 D<01F000060C000C060018070038038070
0380700380F001C0F001C0F001C0F001E0F001E0F001E0F001E0F001E07001E07003E038
03E01805E00C05E00619E003E1E00001C00001C00001C000038000038030030078070078
0600700C002018001030000FC00013227EA018>I<0001800000018000000180000003C0
000003C0000003C0000005E0000005E000000DF0000008F0000008F0000010F800001078
000010780000203C0000203C0000203C0000401E0000401E0000401E0000800F0000800F
0000FFFF000100078001000780030007C0020003C0020003C0040003E0040001E0040001
E00C0000F00C0000F03E0001F8FF800FFF20237EA225>65 D<0007E0100038183000E006
3001C00170038000F0070000F00E0000701E0000701C0000303C0000303C0000307C0000
107800001078000010F8000000F8000000F8000000F8000000F8000000F8000000F80000
00F800000078000000780000107C0000103C0000103C0000101C0000201E0000200E0000
40070000400380008001C0010000E0020000381C000007E0001C247DA223>67
D<FFFFFFC00F8007C0078001C0078000C007800040078000400780006007800020078000
200780002007802020078020000780200007802000078060000780E00007FFE0000780E0
000780600007802000078020000780200007802008078000080780000807800010078000
1007800010078000300780003007800070078000E00F8003E0FFFFFFE01D227EA121>69
D<FFFFFFC00F8007C0078001C0078000C007800040078000400780006007800020078000
200780002007802020078020000780200007802000078060000780E00007FFE0000780E0
000780600007802000078020000780200007802000078000000780000007800000078000
0007800000078000000780000007800000078000000FC00000FFFE00001B227EA120>I<
FFFC0FC00780078007800780078007800780078007800780078007800780078007800780
078007800780078007800780078007800780078007800780078007800FC0FFFC0E227EA1
12>73 D<03FFF0001F00000F00000F00000F00000F00000F00000F00000F00000F00000F
00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
00000F00000F00000F00700F00F80F00F80F00F80E00F01E00401C0020380018700007C0
0014237EA119>I<FFC00003FF0FC00003F007C00003E005E00005E005E00005E004F000
09E004F00009E004F00009E004780011E004780011E004780011E0043C0021E0043C0021
E0043C0021E0041E0041E0041E0041E0040F0081E0040F0081E0040F0081E004078101E0
04078101E004078101E00403C201E00403C201E00401E401E00401E401E00401E401E004
00F801E00400F801E00400F801E004007001E00E007001E01F007003F0FFE0203FFF2822
7EA12D>77 D<FF8007FF07C000F807C0007005E0002004F0002004F0002004780020047C
0020043C0020041E0020041F0020040F002004078020040780200403C0200401E0200401
E0200400F0200400F8200400782004003C2004003E2004001E2004000F2004000F200400
07A0040003E0040003E0040001E0040001E0040000E00E0000601F000060FFE000202022
7EA125>I<FFFFF0000F803C0007800F0007800780078007C0078003C0078003E0078003
E0078003E0078003E0078003E0078003E0078003C0078007C00780078007800F0007803C
0007FFF00007800000078000000780000007800000078000000780000007800000078000
000780000007800000078000000780000007800000078000000FC00000FFFC00001B227E
A121>80 D<FFFFE000000F803C000007800E00000780078000078007C000078003C00007
8003E000078003E000078003E000078003E000078003E000078003C000078007C0000780
07800007800E000007803C000007FFE000000780700000078038000007801C000007801E
000007800E000007800F000007800F000007800F000007800F000007800F800007800F80
0007800F800007800F808007800FC080078007C0800FC003C100FFFC01E2000000007C00
21237EA124>82 D<03F0200C0C601802603001E07000E0600060E00060E00060E00020E0
0020E00020F00000F000007800007F00003FF0001FFE000FFF0003FF80003FC00007E000
01E00000F00000F0000070800070800070800070800070C00060C00060E000C0F000C0C8
0180C6070081FC0014247DA21B>I<7FFFFFF87807807860078018400780084007800840
078008C007800C8007800480078004800780048007800400078000000780000007800000
078000000780000007800000078000000780000007800000078000000780000007800000
078000000780000007800000078000000780000007800000078000000780000007800000
0FC00003FFFF001E227EA123>I<0FE0001838003C0C003C0E0018070000070000070000
070000FF0007C7001E07003C0700780700700700F00708F00708F00708F00F087817083C
23900FC1E015157E9418>97 D<0E0000FE00001E00000E00000E00000E00000E00000E00
000E00000E00000E00000E00000E00000E00000E1F000E61C00E80600F00300E00380E00
3C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E001C0E003C0E00380F00
700C80600C41C0083F0017237FA21B>I<01FE000703000C07801C078038030078000070
0000F00000F00000F00000F00000F00000F00000F000007000007800403800401C00800C
010007060001F80012157E9416>I<0000E0000FE00001E00000E00000E00000E00000E0
0000E00000E00000E00000E00000E00000E00000E001F8E00704E00C02E01C01E03800E0
7800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E03800E0
1801E00C02E0070CF001F0FE17237EA21B>I<01FC000707000C03801C01C03801C07801
E07000E0F000E0FFFFE0F00000F00000F00000F00000F000007000007800203800201C00
400E008007030000FC0013157F9416>I<003C00C6018F038F030F070007000700070007
000700070007000700FFF807000700070007000700070007000700070007000700070007
000700070007000700070007807FF8102380A20F>I<00007001F198071E180E0E181C07
001C07003C07803C07803C07803C07801C07001C07000E0E000F1C0019F0001000001000
001800001800001FFE000FFFC00FFFE03800F0600030400018C00018C00018C000186000
306000303800E00E038003FE0015217F9518>I<0E0000FE00001E00000E00000E00000E
00000E00000E00000E00000E00000E00000E00000E00000E00000E1F800E60C00E80E00F
00700F00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E
00700E00700E00700E00700E0070FFE7FF18237FA21B>I<1C001E003E001E001C000000
00000000000000000000000000000E00FE001E000E000E000E000E000E000E000E000E00
0E000E000E000E000E000E000E000E000E00FFC00A227FA10E>I<01C003E003E003E001
C00000000000000000000000000000000001E00FE001E000E000E000E000E000E000E000
E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0
C0F18061803E000B2C82A10F>I<0E0000FE00001E00000E00000E00000E00000E00000E
00000E00000E00000E00000E00000E00000E00000E03FC0E01F00E01C00E01800E02000E
04000E08000E10000E38000EF8000F1C000E1E000E0E000E07000E07800E03C00E01C00E
01E00E00F00E00F8FFE3FE17237FA21A>I<0E00FE001E000E000E000E000E000E000E00
0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
0E000E000E000E000E000E000E00FFE00B237FA20E>I<0E1FC07F00FE60E183801E8072
01C00F003C00E00F003C00E00E003800E00E003800E00E003800E00E003800E00E003800
E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E0
0E003800E00E003800E00E003800E0FFE3FF8FFE27157F942A>I<0E1F80FE60C01E80E0
0F00700F00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070
0E00700E00700E00700E00700E0070FFE7FF18157F941B>I<01FC000707000C01801800
C03800E0700070700070F00078F00078F00078F00078F00078F00078F000787000707800
F03800E01C01C00E038007070001FC0015157F9418>I<0E1F00FE61C00E80600F00700E
00380E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E003C0E003C0E
00380F00700E80E00E41C00E3F000E00000E00000E00000E00000E00000E00000E00000E
00000E0000FFE000171F7F941B>I<0E3CFE461E8F0F0F0F060F000E000E000E000E000E
000E000E000E000E000E000E000E000E000F00FFF010157F9413>114
D<0F8830786018C018C008C008E008F0007F803FE00FF001F8003C801C800C800CC00CC0
08E018D0308FC00E157E9413>I<02000200020002000600060006000E001E003E00FFF8
0E000E000E000E000E000E000E000E000E000E000E000E040E040E040E040E040E040708
030801F00E1F7F9E13>I<0E0070FE07F01E00F00E00700E00700E00700E00700E00700E
00700E00700E00700E00700E00700E00700E00700E00700E00F00E00F006017003827800
FC7F18157F941B>I<FFC1FE1E00780E00300E00200E0020070040070040038080038080
03808001C10001C10000E20000E20000E200007400007400003800003800003800001000
17157F941A>I<FF8FF8FF1E01E03C1C01C0180E01C0180E01E0100E01E0100702602007
0270200702702003843040038438400384384001C8188001C81C8001C81C8000F00D0000
F00F0000F00F0000600600006006000060060020157F9423>I<FFC1FE1E00780E00300E
00200E002007004007004003808003808003808001C10001C10000E20000E20000E20000
7400007400003800003800003800001000001000002000002000002000004000F04000F0
8000F180004300003C0000171F7F941A>121 D E /Fo 20 118 df<FFFF80FFFF80FFFF
8011037F9016>45 D<FFFFFFE00000FFFFFFFC000007E0007F000003E0000F800003E000
03C00003E00001E00003E00000F00003E00000780003E000003C0003E000001E0003E000
001E0003E000000F0003E000000F0003E000000F8003E00000078003E0000007C003E000
0007C003E0000003C003E0000003C003E0000003E003E0000003E003E0000003E003E000
0003E003E0000003E003E0000003E003E0000003E003E0000003E003E0000003E003E000
0003E003E0000003E003E0000003C003E0000003C003E0000007C003E0000007C003E000
00078003E00000078003E000000F8003E000000F0003E000001F0003E000001E0003E000
003C0003E00000780003E00000F80003E00001F00003E00003E00003E0000F800007E000
3F0000FFFFFFFC0000FFFFFFE000002B317CB033>68 D<FFFF80FFFF8007F00003E00003
E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003
E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003
E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003
E00003E00003E00003E00003E00003E00007F000FFFF80FFFF8011317DB017>73
D<FFF00000007FF8FFF00000007FF807F00000007F0002F8000000BE0002F8000000BE00
02F8000000BE00027C0000013E00027C0000013E00023E0000023E00023E0000023E0002
3E0000023E00021F0000043E00021F0000043E00021F0000043E00020F8000083E00020F
8000083E00020F8000083E000207C000103E000207C000103E000207C000103E000203E0
00203E000203E000203E000201F000403E000201F000403E000201F000403E000200F800
803E000200F800803E000200F800803E0002007C01003E0002007C01003E0002007C0100
3E0002003E02003E0002003E02003E0002003E02003E0002001F04003E0002001F04003E
0002000F88003E0002000F88003E0002000F88003E00020007D0003E00020007D0003E00
020007D0003E00020003E0003E00020003E0003E00020003E0003E00070001C0003E000F
8001C0007F00FFF801C00FFFF8FFF800800FFFF835317CB03D>77
D<FFFFFFC000FFFFFFF80007E0007E0003E0001F0003E000078003E00003C003E00001E0
03E00001F003E00001F003E00000F003E00000F803E00000F803E00000F803E00000F803
E00000F803E00000F803E00000F003E00001F003E00001E003E00003E003E00003C003E0
00078003E0001F0003E0007C0003FFFFF00003E000000003E000000003E000000003E000
000003E000000003E000000003E000000003E000000003E000000003E000000003E00000
0003E000000003E000000003E000000003E000000003E000000003E000000003E0000000
03E000000003E000000003E000000007F0000000FFFF800000FFFF80000025317CB02D>
80 D<007F802001FFE02007C078600F001C601E0006E03C0003E0380001E0780000E070
0000E070000060F0000060F0000060F0000020F0000020F0000020F8000020F80000007C
0000007E0000003F0000003FC000001FF800000FFF800007FFF80003FFFC0000FFFF0000
0FFF800000FFC000001FE0000007E0000003F0000001F0000000F0000000F8000000F880
00007880000078800000788000007880000078C0000078C0000070E00000F0E00000E0F0
0000E0F80001C0EC000380C7000700C1F01E00807FFC00800FF0001D337CB125>83
D<00FE00000303C0000C00E00010007000100038003C003C003E001C003E001E003E001E
0008001E0000001E0000001E0000001E00000FFE0000FC1E0003E01E000F801E001F001E
003E001E003C001E007C001E00F8001E04F8001E04F8001E04F8003E04F8003E0478003E
047C005E043E008F080F0307F003FC03E01E1F7D9E21>97 D<003F8000E0600380180700
040F00041E001E1C003E3C003E7C003E7C0008780000F80000F80000F80000F80000F800
00F80000F80000F80000F800007800007C00007C00003C00011E00011E00020F00020700
0403801800E060003F80181F7D9E1D>99 D<000001E000003FE000003FE0000003E00000
01E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E00000
01E0000001E0000001E0000001E0000001E0000001E0001F81E000F061E001C019E00780
05E00F0003E00E0003E01E0001E03C0001E03C0001E07C0001E0780001E0F80001E0F800
01E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0780001E07800
01E03C0001E03C0001E01C0001E01E0003E00E0005E0070009E0038011F000E061FF003F
81FF20327DB125>I<003F800000E0E0000380380007003C000E001E001E001E001C000F
003C000F007C000F0078000F8078000780F8000780F8000780FFFFFF80F8000000F80000
00F8000000F8000000F8000000F8000000780000007C0000003C0000003C0000801E0000
800E0001000F0002000780020001C00C0000F03000001FC000191F7E9E1D>I<0007E000
1C1000383800707C00E07C01E07C01C03803C00003C00003C00003C00003C00003C00003
C00003C00003C00003C00003C00003C000FFFFC0FFFFC003C00003C00003C00003C00003
C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003
C00003C00003C00003C00003C00003C00003C00003C00003C00003C00007E0007FFF007F
FF0016327FB114>I<000000F0007F030801C1C41C0380E81C070070080F0078001E003C
001E003C003E003E003E003E003E003E003E003E003E003E003E003E001E003C001E003C
000F007800070070000780E00009C1C000087F0000180000001800000018000000180000
00180000001C0000000E0000000FFFF80007FFFF0003FFFF800E000FC0180001E0300000
F070000070E0000038E0000038E0000038E0000038E00000387000007070000070380000
E01C0001C00700070001C01C00003FE0001E2F7E9F21>I<07000F801F801F800F800700
000000000000000000000000000000000000000000000780FF80FF800F80078007800780
078007800780078007800780078007800780078007800780078007800780078007800780
0780078007800FC0FFF8FFF80D307EAF12>105 D<0780FE001FC000FF83078060F000FF
8C03C18078000F9001E2003C0007A001E4003C0007A000F4001E0007C000F8001E0007C0
00F8001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000
F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0
001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F000
1E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E
000FC001F8003F00FFFC1FFF83FFF0FFFC1FFF83FFF0341F7E9E38>109
D<0780FE0000FF83078000FF8C03C0000F9001E00007A001E00007A000F00007C000F000
07C000F000078000F000078000F000078000F000078000F000078000F000078000F00007
8000F000078000F000078000F000078000F000078000F000078000F000078000F0000780
00F000078000F000078000F000078000F000078000F000078000F000078000F0000FC001
F800FFFC1FFF80FFFC1FFF80211F7E9E25>I<001FC00000F0780001C01C00070007000F
0007801E0003C01C0001C03C0001E03C0001E0780000F0780000F0780000F0F80000F8F8
0000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8780000F07C0001F03C
0001E03C0001E01E0003C01E0003C00F00078007800F0001C01C0000F07800001FC0001D
1F7E9E21>I<0783E0FF8C18FF907C0F907C07A07C07C03807C00007C00007C000078000
078000078000078000078000078000078000078000078000078000078000078000078000
0780000780000780000780000780000780000FC000FFFE00FFFE00161F7E9E19>114
D<01FC100E03301800F0300070600030E00030E00010E00010E00010F00010F800007E00
003FF0001FFF000FFFC003FFE0003FF00001F80000F880003C80003C80001CC0001CC000
1CE0001CE00018F00038F00030CC0060C301C080FE00161F7E9E1A>I<00400000400000
400000400000400000C00000C00000C00001C00001C00003C00007C0000FC0001FFFE0FF
FFE003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003
C00003C00003C00003C00003C00003C01003C01003C01003C01003C01003C01003C01003
C01001C02001E02000E0400078C0001F00142C7FAB19>I<078000F000FF801FF000FF80
1FF0000F8001F000078000F000078000F000078000F000078000F000078000F000078000
F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0
00078000F000078000F000078000F000078000F000078000F000078000F000078001F000
078001F000078001F000038002F00003C004F00001C008F800007030FF80001FC0FF8021
1F7E9E25>I E /Fp 5 85 df<00000000C00000000000E00000000001E00000000003E0
0000000003E00000000007E00000000007E0000000000FE0000000000FE0000000001FE0
000000001FE00000000037E00000000067E00000000067E000000000C7E000000000C7F0
0000000183F00000000183F00000000303F00000000703F00000000603F00000000C03F0
0000000C03F00000001803F00000001803F00000003003F00000003003F00000006003F0
000000C003F0000000C003F00000018003F00000018003F8000003FFFFF8000003FFFFF8
0000060001F800000E0001F800000C0001F80000180001F80000180001F80000300001F8
0000300001F80000600001F80000E00001F80000C00001F80001C00001F80001C00001F8
0007C00001FC001FC00003FC00FFF8007FFFE0FFF8007FFFE02B327BB135>65
D<000FFFFFFE0000000FFFFFFF800000007F000FE00000007E0003F00000007E0000F800
00007E0000FC0000007E00007C000000FC00003E000000FC00003E000000FC00003F0000
00FC00001F000001F800001F000001F800001F800001F800001F800001F800001F800003
F000001F800003F000001F800003F000001F800003F000001F800007E000003F800007E0
00003F800007E000003F800007E000003F80000FC000003F00000FC000007F00000FC000
007F00000FC000007F00001F8000007E00001F800000FE00001F800000FE00001F800000
FC00003F000001FC00003F000001F800003F000001F800003F000003F000007E000003E0
00007E000007E000007E00000FC000007E00000F800000FC00001F800000FC00003F0000
00FC00007E000000FC0000FC000001F80001F0000001F80003E0000001F8000FC0000003
F8007F000000FFFFFFFC000000FFFFFFE000000031317BB036>68
D<000FFFFFFFFC000FFFFFFFFC00007F0001FC00007E00007C00007E00003C00007E0000
3C00007E0000180000FC0000180000FC0000180000FC0000180000FC0000180001F80000
180001F80000180001F80000180001F80000180003F00080100003F00180000003F00180
000003F00180000007E00300000007E00300000007E00700000007E01F0000000FFFFE00
00000FFFFE0000000FC01E0000000FC00E0000001F800C0000001F800C0000001F800C00
00001F800C0000003F00180000003F00080000003F00000000003F00000000007E000000
00007E00000000007E00000000007E0000000000FC0000000000FC0000000000FC000000
0000FC0000000001F80000000001F80000000001F80000000003F800000000FFFFF00000
00FFFFF00000002E317BB02F>70 D<000FFFFFF000000FFFFFFE0000007F003F8000007E
000FC000007E0007E000007E0003F000007E0001F80000FC0001F80000FC0001F80000FC
0001F80000FC0001F80001F80003F80001F80003F80001F80003F80001F80003F00003F0
0007F00003F00007E00003F0000FC00003F0000FC00007E0001F000007E0007E000007E0
00FC000007E007F000000FFFFFC000000FFFFF0000000FC00F8000000FC003C000001F80
03E000001F8001F000001F8001F000001F8001F800003F0001F800003F0001F800003F00
01F800003F0001F800007E0003F800007E0003F800007E0003F000007E0003F00000FC00
07F00000FC0007F00000FC0007F00800FC0007F00C01F80007F01801F80007F01801F800
03F03003F80003F030FFFFE001F0E0FFFFE000FFC0000000003F002E327BB034>82
D<07FFFFFFFFF00FFFFFFFFFF00FC00FE003F01E000FC000F01C000FC000E018000FC000
E038000FC0006030001F8000E030001F8000E060001F8000C060001F8000C060003F0000
C0C0003F0000C0C0003F0000C0C0003F0000C080007E00008000007E00000000007E0000
0000007E0000000000FC0000000000FC0000000000FC0000000000FC0000000001F80000
000001F80000000001F80000000001F80000000003F00000000003F00000000003F00000
000003F00000000007E00000000007E00000000007E00000000007E0000000000FC00000
00000FC0000000000FC0000000000FC0000000001F80000000001F80000000001F800000
00001F80000000003F00000000003F00000000003F0000000000FF00000000FFFFFF0000
00FFFFFF0000002C3173B033>84 D E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300dpi
TeXDict begin

%%EndSetup
%%Page: 0 1
0 0 bop 795 908 a Fp(D)26 b(R)g(A)f(F)h(T)225 999 y Fo(Do)r(cumen)n(t)
20 b(for)i(a)f(Standard)g(Message-P)n(assing)f(In)n(terface)621
1194 y Fn(Message)c(P)o(assing)h(In)o(terface)e(F)l(orum)828
1320 y(June)i(15,)f(1993)87 1378 y(This)g(w)o(ork)g(w)o(as)h(supp)q
(orted)g(b)o(y)f(ARP)l(A)g(and)g(NSF)g(under)g(con)o(tract)g(n)o(um)o
(b)q(er)f(###,)g(b)o(y)g(the)192 1436 y(National)h(Science)f(F)l
(oundation)i(Science)e(and)i(T)l(ec)o(hnology)f(Cen)o(ter)f(Co)q(op)q
(erativ)o(e)76 1494 y(Agreemen)o(t)e(No.)22 b(CCR-8809615,)d(and)e(b)o
(y)e(the)h(Commission)e(of)j(the)f(Europ)q(ean)i(Comm)o(unit)n(y)654
1552 y(through)f(Esprit)f(pro)s(ject)g(P6643.)p eop
%%Page: 1 2
1 1 bop 75 377 a Fm(Con)m(ten)m(ts)75 645 y Fl(1)42 b(In)o(tro)q
(duction)19 b(to)f(MPI)1230 b(1)75 747 y(2)42 b(P)o(oin)o(t)17
b(to)h(P)o(oin)o(t)g(Comm)o(unication)1001 b(2)75 849
y(3)42 b(Collectiv)o(e)19 b(Comm)o(unication)1103 b(3)75
951 y(4)42 b(Pro)q(cess)17 b(T)l(op)q(ologies)1276 b(4)75
1053 y(5)42 b(Language)19 b(Binding)1294 b(5)143 1109
y Fk(5.1)46 b(In)o(tro)q(duction)15 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f
(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)
g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91 b Fk(5)143
1166 y(5.2)46 b(Data)14 b(T)o(yp)q(es)h(and)g(Naming)h(Con)o(v)o(en)o
(tions)43 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91 b Fk(5)143 1222 y(5.3)46
b(F)l(ortran)14 b(77)g(Binding)j(Issues)34 b Fj(:)23
b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91 b Fk(6)143
1279 y(5.4)46 b(C)15 b(Binding)i(Issues)35 b Fj(:)22
b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91
b Fk(6)143 1335 y(5.5)46 b(Sp)q(eci\014c)17 b(Bindings)32
b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g
(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91
b Fk(6)248 1392 y(5.5.1)50 b(C)15 b(bindings)i(for)e(P)o(oin)o(t-to-P)o
(oin)o(t)f(Comm)o(unication)k Fj(:)k(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
g(:)h(:)f(:)91 b Fk(7)248 1448 y(5.5.2)50 b(F)l(ortran)14
b(Bindings)j(for)e(P)o(oin)o(t-to-P)o(oin)o(t)f(Routines)34
b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)69
b Fk(10)75 1550 y Fl(6)42 b(Correctness)16 b(Issues)1258
b(14)75 1652 y(7)42 b(En)o(vironmen)o(tal)18 b(Managemen)o(t)f(and)h
(Inquiry)743 b(15)75 1754 y(8)42 b(Pro\014ling)1484 b(16)969
2828 y Fk(i)p eop
%%Page: 0 3
0 2 bop 875 722 a Fl(Abstract)75 828 y Fk(The)18 b(Message)f(P)o
(assing)h(In)o(terface)f(F)l(orum)h(\(MPIF\),)e(with)i(participation)h
(from)e(o)o(v)o(er)g(40)g(organiza-)75 885 y(tions,)f(has)h(b)q(een)g
(meeting)g(since)h(Jan)o(uary)e(1993)f(to)h(discuss)h(and)g(de\014ne)g
(a)f(set)h(of)f(library)h(in)o(terface)75 941 y(standards)f(for)h
(message)f(passing.)25 b(MPIF)16 b(is)i(not)e(sanctioned)i(or)e(supp)q
(orted)h(b)o(y)g(an)o(y)g(o\016cial)g(stan-)75 998 y(dards)e
(organization.)166 1054 y(This)22 b(is)f(a)g(draft)f(of)h(what)g(will)h
(b)q(ecome)g(the)f(Final)h(Rep)q(ort,)h(V)l(ersion)f(1.0,)f(of)f(the)i
(Message)75 1111 y(P)o(assing)c(In)o(terface)h(F)l(orum.)29
b(This)19 b(do)q(cumen)o(t)g(con)o(tains)g(all)g(the)g(tec)o(hnical)h
(features)e(prop)q(osed)h(for)75 1167 y(the)c(in)o(terface.)20
b(This)c(cop)o(y)f(of)g(the)g(draft)g(w)o(as)f(pro)q(cessed)i(b)o(y)f
(L)1174 1161 y Fi(a)1195 1167 y Fk(T)1220 1181 y(E)1246
1167 y(X)g(on)g(June)h(15,)f(1993.)166 1224 y(MPIF)j(in)o(vites)h
(commen)o(ts)f(on)h(the)f(tec)o(hnical)i(con)o(ten)o(t)e(of)g(MPI,)g
(as)g(w)o(ell)i(as)e(on)g(the)h(editorial)75 1280 y(presen)o(tation)14
b(in)g(the)g(do)q(cumen)o(t.)19 b(Commen)o(ts)13 b(receiv)o(ed)i(b)q
(efore)e(July)i(1,)e(1993)g(will)i(b)q(e)f(considered)h(in)75
1336 y(pro)q(ducing)i(the)e(\014nal)h(draft)e(of)h(V)l(ersion)h(1.0)e
(of)h(the)g(Message)g(P)o(assing)g(In)o(terface)g(Sp)q(eci\014cation.)
166 1393 y(The)i(goal)f(of)g(the)g(Message)g(P)o(assing)g(In)o
(terface,)g(simply)i(stated,)e(is)g(to)g(dev)o(elop)h(a)g(widely)g
(used)75 1449 y(standard)g(for)f(writing)i(message-passing)f(programs.)
24 b(As)17 b(suc)o(h)h(the)f(in)o(terface)g(should)h(establishing)75
1506 y(a)d(practical,)h(p)q(ortable,)f(e\016cien)o(t,)g(and)h
(\015exible)h(standard)e(for)f(message)h(passing.)p eop
%%Page: 1 4
1 3 bop 75 356 a Fh(Chapter)34 b(1)75 564 y Fm(In)m(tro)s(duction)41
b(to)g(MPI)964 2828 y Fk(1)p eop
%%Page: 2 5
2 4 bop 75 356 a Fh(Chapter)34 b(2)75 564 y Fm(P)m(oin)m(t)41
b(to)f(P)m(oin)m(t)h(Comm)m(unication)964 2828 y Fk(2)p
eop
%%Page: 3 6
3 5 bop 75 356 a Fh(Chapter)34 b(3)75 564 y Fm(Collecti)q(v)m(e)42
b(Comm)m(unication)964 2828 y Fk(3)p eop
%%Page: 4 7
4 6 bop 75 356 a Fh(Chapter)34 b(4)75 564 y Fm(Pro)s(cess)40
b(T)-10 b(op)s(ologi)q(es)964 2828 y Fk(4)p eop
%%Page: 5 8
5 7 bop 75 358 a Fh(Chapter)34 b(5)75 568 y Fm(Language)41
b(Binding)75 811 y Fg(5.1)70 b(In)n(tro)r(duction)75
916 y Fk(This)21 b(c)o(hapter)g(de\014nes)h(the)f(rules)g(for)g(MPI)f
(language)h(binding)i(in)f(general)f(and)g(for)f(F)l(ortran)g(77,)75
972 y(F)l(ortran)15 b(90,)g(ANSI)i(C,)e(and)i(ANSI)f(C++)h(in)g
(particular.)23 b(De\014ned)17 b(here)f(are)g(v)m(arious)g(ob)s(ject)g
(repre-)75 1029 y(sen)o(tations,)d(as)h(w)o(ell)g(as)f(the)h(naming)g
(con)o(v)o(en)o(tions)g(used)g(for)f(expressing)i(this)f(standard.)19
b(The)14 b(actual)75 1085 y(calling)j(sequences)f(are)f(de\014ned)i
(elsewhere.)166 1144 y(It)23 b(is)g(exp)q(ected)h(that)e(an)o(y)g(F)l
(ortran)g(90)g(and)h(C++)g(implemen)o(tations)h(use)f(the)g(F)l(ortran)
f(77)75 1200 y(and)f(ANSI)h(C)e(bindings,)k(resp)q(ectiv)o(ely)l(.)39
b(Although)22 b(w)o(e)e(consider)i(it)f(premature)g(to)f(de\014ne)i
(other)75 1257 y(bindings)e(to)d(F)l(ortran)g(90)g(and)h(C++,)h(the)f
(curren)o(t)f(bindings)j(are)e(designed)h(to)e(encourage,)i(rather)75
1313 y(than)c(discourage,)g(exp)q(erimen)o(tation)i(with)e(b)q(etter)g
(bindings)i(whic)o(h)f(migh)o(t)f(b)q(e)h(adopted)g(later.)166
1371 y(There)i(are)g(sev)o(eral)g(imp)q(ortan)o(t)f(language)h(binding)
i(issues)f(not)e(addressed)i(b)o(y)e(this)i(standard.)75
1428 y(It)f(is)g(b)q(ey)o(ond)h(the)f(scop)q(e)g(of)g(this)g(standard)g
(to)f(discuss)i(the)f(in)o(terop)q(erabilit)o(y)i(of)d(message)h
(passing)75 1484 y(b)q(et)o(w)o(een)c(languages.)19 b(Although)c(it)e
(w)o(ould)i(b)q(e)f(con)o(v)o(enien)o(t)g(to)f(b)q(e)h(able)h(to)e
(guaran)o(tee)g(that)f(messages)75 1541 y(sen)o(t)k(b)q(et)o(w)o(een)h
(languages)f(w)o(ere)h(prop)q(erly)g(in)o(terpreted,)g(the)f(matc)o
(hing)h(of)f(t)o(yp)q(es)g(across)g(languages)75 1597
y(prev)o(en)o(ts)f(the)h(inclusion)i(of)d(suc)o(h)h(a)f(guaran)o(tee)g
(in)i(this)f(standard.)k(It)c(is)g(fully)h(exp)q(ected)g(that)d(man)o
(y)75 1654 y(implemen)o(tations)i(will)g(ha)o(v)o(e)f(suc)o(h)g
(features,)f(and)h(that)f(suc)o(h)h(features)g(are)f(a)h(sign)g(of)f
(the)h(qualit)o(y)g(of)75 1710 y(the)g(implemen)o(tation.)166
1851 y Ff(Discussion:)f Fe(There)f(w)o(as)e(some)g(informal)d
(discussion)k(of)f(this)g(issue)h(at)g(the)g(last)f(meeting.)16
b(Is)c(it)f(p)q(ossible)75 1908 y(to)j(sa)o(y)f(something)g(stronger?)
75 2145 y Fg(5.2)70 b(Data)23 b(T)n(yp)r(es)g(and)g(Naming)f(Con)n(v)n
(en)n(tions)75 2250 y Fk(All)15 b(named)f(constan)o(ts,)f(routine)h
(names,)g(and)g(v)m(ariable)h(names)f(will)h(b)q(egin)g(with)f(the)g
(letters)g(\\MPI".)75 2306 y(In)21 b(the)f(C)g(binding,)j(these)d(will)
i(b)q(e)f(upp)q(er)g(case,)g(with)f(all)h(remaining)h(letters)e(in)h
(lo)o(w)o(er)f(case.)34 b(In)75 2363 y(F)l(ortran,)14
b(the)h(en)o(tire)h(name)f(will)i(b)q(e)f(lo)o(w)o(er)e(case.)166
2421 y(Handles)e(are)g(represen)o(ted)f(as)h(in)o(tegers)f(in)h(F)l
(ortran)f(and)g(as)g(p)q(oin)o(ters)h(to)f(structures)g(in)i(C.)d(T)o
(yp)q(ed)75 2478 y(comm)o(unication)20 b(routines)g(supp)q(ort)g
Fl(string)p Fk(s,)g Fl(double)j(precision)p Fk(,)e Fl(real)p
Fk(,)f(and)g Fl(in)o(teger)f Fk(data)g(in)75 2534 y(F)l(ortran.)34
b(Null-terminated)23 b Fl(string)p Fk(s,)e Fl(double)p
Fk(,)h Fl(real)p Fk(,)g Fl(short)p Fk(,)f Fl(c)o(har)p
Fk(,)g(and)g Fl(long)g Fk(are)f(supp)q(orted)75 2591
y(in)g(C.)e(In)i(addition,)g(a)f(sp)q(ecial)h Fl(b)o(yte)f
Fk(t)o(yp)q(e)g(is)g(supp)q(orted)g(in)h(b)q(oth)f(languages.)31
b(This)20 b(t)o(yp)q(e)f(allo)o(ws)75 2647 y(comm)o(unication)h(to)f(b)
q(e)h(p)q(erformed)g(with)g(no)f(t)o(yp)q(e)h(con)o(v)o(ersion)g(at)f
(all.)33 b(In)21 b(C,)d(the)i(de\014nitions)h(of)75 2704
y(named)14 b(constan)o(ts,)f(function)i(protot)o(yp)q(es,)f(and)g
(aggregate)f(t)o(yp)q(e)h(information)g(m)o(ust)g(b)q(e)h(supplied)h
(in)964 2828 y(5)p eop
%%Page: 6 9
6 8 bop 75 -100 a Fk(6)977 b Fd(CHAPTER)16 b(5.)34 b(LANGUA)o(GE)15
b(BINDING)290 81 y Fc(double)23 b(precision)f(a)290 138
y(call)h(foo\(a\))385 194 y(.)385 251 y(.)385 307 y(.)290
363 y(subroutine)f(foo\(b\))290 420 y(integer)h(b)75
568 y Fk(Figure)e(5.1:)29 b(This)21 b(is)g(an)f(example)h(of)f(calling)
i(a)e(routine)h(with)g(mismatc)o(hed)f(formal)g(and)h(actual)75
624 y(parameters.)75 768 y(an)15 b(include)j(\014le)e
Fc(mpi.h)p Fk(.)75 941 y Fg(5.3)70 b(F)-6 b(ortran)24
b(77)g(Binding)e(Issues)75 1053 y Fk(There)17 b(are)g(sev)o(eral)g(p)q
(oin)o(ts)h(w)o(ere)f(this)g(standard)g(div)o(erges)h(from)e(the)h
(ANSI)h(F)l(ortran)e(77)h(standard.)75 1109 y(Unless)j(explicitly)i
(stated,)d(the)h(MPI)f(F77)f(binding)j(is)f(consisten)o(t)f(with)g
(ANSI)h(standard)f(F)l(ortran)75 1166 y(77.)26 b(These)18
b(exceptions)g(are)g(consisten)o(t)f(with)h(common)f(practice)h(in)h
(the)e(F)l(ortran)f(comm)o(unit)o(y)l(.)27 b(In)75 1222
y(particular:)143 1337 y Fb(\017)c Fk(Iden)o(ti\014ers)16
b(are)f(limited)i(to)e(31,)f(not)h(six,)g(signi\014can)o(t)h(c)o
(haracters.)143 1452 y Fb(\017)23 b Fk(Iden)o(ti\014ers)16
b(ma)o(y)f(con)o(tain)g(underscores)h(after)e(the)h(\014rst)g(c)o
(haracter.)143 1567 y Fb(\017)23 b Fk(The)14 b(t)o(yp)q(es)f(of)g(the)h
(formal)f(parameter)g(list)i(ma)o(y)e(not)g(matc)o(h)g(the)h(calling)h
(parameter)e(list.)20 b(\(An)189 1623 y(example)c(is)f(giv)o(en)h(in)g
(\014gure)f(5.3.\))143 1738 y Fb(\017)23 b Fk(Although)16
b(not)g(required,)g(it)h(is)f(strongly)g(suggested)f(that)h(named)g
(constan)o(ts)f(b)q(e)h(pro)o(vided)h(in)189 1794 y(an)e(include)i
(\014le.)75 2021 y Fg(5.4)70 b(C)22 b(Binding)g(Issues)75
2132 y Fk(W)l(e)15 b(use)h(the)f(ANSI)h(C)f(declaration)h(format.)75
2306 y Fg(5.5)70 b(Sp)r(eci\014c)21 b(Bindings)75 2500
y Ff(Discussion:)13 b Fe(What)c(w)o(ould)g(b)q(e)h(the)g(b)q(est)h(w)o
(a)o(y)e(to)g(presen)o(t)i(the)f(follo)o(wing)d(information?)14
b(One)c(big)f(alphab)q(etical)75 2556 y(list?)16 b(In)10
b(order)h(of)e(presen)o(tation)i(in)e(the)i(individual)d(c)o(hapters?)
18 b(By)10 b(c)o(hapter)h(but)f(alphab)q(etical)f(within)g(c)o(hapter?)
75 2613 y(C)14 b(and)g(F)m(ortran)f(mixed)g(or)g(separate?)p
eop
%%Page: 7 10
7 9 bop 75 -100 a Fd(5.5.)34 b(SPECIFIC)15 b(BINDINGS)1213
b Fk(7)75 45 y Fa(5.5.1)55 b(C)19 b(bindings)g(for)g(P)n(oin)n(t-to-P)n
(oin)n(t)g(Comm)n(unication)75 138 y Fk(These)d(are)e(in)i(alphab)q
(etical)i(order.)75 199 y Fc(MPI)p 150 199 15 2 v 17
w(append)p 311 199 V 16 w(contiguous\()k(MPI)p 685 199
V 17 w(BD)i(bd,)f(void*)g(start,)h(int)f(count,)393 255
y(MPI)p 468 255 V 17 w(DATATYPE)g(datatype)f(\))75 345
y(MPI)p 150 345 V 17 w(append)p 311 345 V 16 w(hindexed\()h(MPI)p
638 345 V 17 w(BD)g(bd,)h(void*)f(start,)g(int)g(count,)g(int)h(*index)
p 1634 345 V 16 w(array,)393 402 y(MPI)p 468 402 V 17
w(DATATYPE)f(datatype)f(\))75 492 y(MPI)p 150 492 V 17
w(append)p 311 492 V 16 w(hvec\()h(MPI)p 542 492 V 17
w(BD)h(bd,)f(void*)g(start,)g(int)h(count,)f(int)g(stride,)g(int)h
(lenblk,)393 548 y(MPI)p 468 548 V 17 w(DATATYPE)f(datatype)f(\))75
639 y(MPI)p 150 639 V 17 w(append)p 311 639 V 16 w(indexed\()h(MPI)p
614 639 V 17 w(BD)g(bd,)h(void*)f(start,)g(int)g(count,)g(int)h(*index)
p 1610 639 V 16 w(array,)393 695 y(MPI)p 468 695 V 17
w(DATATYPE)f(datatype)f(\))75 785 y(MPI)p 150 785 V 17
w(append)p 311 785 V 16 w(vec\()h(MPI)p 518 785 V 17
w(BD)h(bd,)f(int)h(count,)f(int)g(stride,)g(int)h(lenblk,)393
842 y(MPI)p 468 842 V 17 w(DATATYPE)f(datatype)f(\))75
932 y(MPI)p 150 932 V 17 w(associated\(MPI)p 503 932
V 15 w(HANDLE)h(handle,)g(MPI)p 948 932 V 17 w(HANDLE)g(handle)p
1276 932 V 16 w(type)g(\))75 1022 y(MPI)p 150 1022 V
17 w(cancel\()g(MPI)p 430 1022 V 16 w(HANDLE)g(handle,)g(int)h(flag)f
(\))75 1113 y(MPI)p 150 1113 V 17 w(commit)p 311 1113
V 16 w(buffer\()g(MPI)p 590 1113 V 17 w(BD)g(bd)h(\))75
1203 y(MPI)p 150 1203 V 17 w(create)p 311 1203 V 16 w(status\()f(MPI)p
590 1203 V 17 w(HANDLE)g(handle)g(\))75 1293 y(MPI)p
150 1293 V 17 w(create)p 311 1293 V 16 w(buffer\()g(MPI)p
590 1293 V 17 w(BD)g(*bd,)h(MPI)p 870 1293 V 16 w(LIFETIME)f
(persistence)g(\))75 1383 y(MPI)p 150 1383 V 17 w(free\()g(MPI)p
382 1383 V 17 w(HANDLE)g(handle)g(\))75 1474 y(MPI)p
150 1474 V 17 w(get)p 239 1474 V 17 w(len\()g(int)g(count,)g(MPI)p
709 1474 V 17 w(STATUS)g(*status,)g(MPI)p 1180 1474 V
17 w(BD)g(bd)h(\))75 1564 y(MPI)p 150 1564 V 17 w(init)p
263 1564 V 16 w(recv)g(\()f(MPI)p 518 1564 V 17 w(HANDLE)g(handle,)g
(MPI)p 965 1564 V 17 w(BD)h(bd,)f(int)g(source,)g(MPI)p
1507 1564 V 17 w(TAG)h(tag,)393 1620 y(MPI)p 468 1620
V 17 w(COMMUNICATOR)e(context,)h(MPI)p 1082 1620 V 17
w(LIFETIME)f(persistence)h(\))75 1710 y(MPI)p 150 1710
V 17 w(init)p 263 1710 V 16 w(rsend)h(\()f(MPI)p 542
1710 V 17 w(HANDLE)g(handle,)g(MPI)p 989 1710 V 17 w(BD)g(bd,)h(int)f
(dest,)g(MPI)p 1483 1710 V 17 w(TAG)h(tag,)393 1767 y(MPI)p
468 1767 V 17 w(COMMUNICATOR)e(context,)h(MPI)p 1082
1767 V 17 w(LIFETIME)f(persistence)h(\))75 1857 y(MPI)p
150 1857 V 17 w(init)p 263 1857 V 16 w(send)h(\()f(MPI)p
518 1857 V 17 w(HANDLE)g(handle,)g(MPI)p 965 1857 V 17
w(BD)h(bd,)f(int)g(dest,)h(MPI)p 1460 1857 V 16 w(TAG)g(tag,)393
1914 y(MPI)p 468 1914 V 17 w(COMUNICATOR)e(context,)h(MPI)p
1058 1914 V 17 w(LIFETIME)g(persistence)f(\))75 2004
y(MPI)p 150 2004 V 17 w(init)p 263 2004 V 16 w(ssend)i(\()f(MPI)p
542 2004 V 17 w(HANDLE)g(handle,)g(MPI)p 989 2004 V 17
w(BD)g(bd,)h(int)f(dest,)g(MPI)p 1483 2004 V 17 w(TAG)h(tag,)393
2060 y(MPI)p 468 2060 V 17 w(COMMUNICATOR)e(context,)h(MPI)p
1082 2060 V 17 w(LIFETIME)f(persistence)h(\))75 2151
y(MPI)p 150 2151 V 17 w(iprobe\()g(int)g(source,)g(MPI)p
716 2151 V 17 w(TAG)g(tag,)h(MPI)p 1020 2151 V 16 w(COMMUNICATOR)f
(context,)f(int)i(flag,)393 2207 y(type,)f(MPI)p 611
2207 V 17 w(STATUS)g(*status)g(\))75 2297 y(MPI)p 150
2297 V 17 w(irecv\()g(MPI)p 406 2297 V 17 w(HANDLE)g(handle,)g(MPI)p
853 2297 V 16 w(BD)h(bd,)f(int)h(source,)f(MPI)p 1395
2297 V 16 w(TAG)h(tag,)393 2354 y(MPI)p 468 2354 V 17
w(COMMUNICATOR)e(context)h(\))75 2444 y(MPI)p 150 2444
V 17 w(irecvc\()g(MPI)p 430 2444 V 16 w(HANDLE)g(handle,)g(void*)h
(start,)f(int)g(count,)g(MPI)p 1449 2444 V 17 w(DATATYPE)393
2500 y(datatype,)g(int)g(source,)g(MPI)p 993 2500 V 17
w(TAG)g(tag,)h(MPI)p 1297 2500 V 16 w(COMMUNICATOR)f(context,)393
2557 y(MPI)p 468 2557 V 17 w(STATUS)g(*status)g(\))75
2647 y(MPI)p 150 2647 V 17 w(irsend)g(\()h(MPI)p 454
2647 V 16 w(HANDLE)f(handle,)g(MPI)p 900 2647 V 17 w(BD)h(bd,)f(int)h
(dest,)f(MPI)p 1395 2647 V 16 w(TAG)h(tag,)393 2704 y(MPI)p
468 2704 V 17 w(COMMUNICATOR)e(context)h(\))p eop
%%Page: 8 11
8 10 bop 75 -100 a Fk(8)977 b Fd(CHAPTER)16 b(5.)34 b(LANGUA)o(GE)15
b(BINDING)75 45 y Fc(MPI)p 150 45 15 2 v 17 w(irsendc)23
b(\()g(MPI)p 477 45 V 17 w(HANDLE)g(handle,)g(void*)g(start,)g(int)h
(count,)393 102 y(MPI)p 468 102 V 17 w(DATATYPE)f(datatype,)f(int)i
(dest,)f(MPI)p 1249 102 V 17 w(TAG)g(tag,)h(MPI)p 1553
102 V 16 w(COMMUNICATOR)393 158 y(context)f(\))75 246
y(MPI)p 150 246 V 17 w(isend)g(\()h(MPI)p 430 246 V 16
w(HANDLE)f(handle,)g(MPI)p 876 246 V 17 w(BD)h(bd,)f(int)h(dest,)f(MPI)
p 1371 246 V 17 w(TAG)g(tag,)393 302 y(MPI)p 468 302
V 17 w(COMMUNICATOR)f(context)h(\))75 390 y(MPI)p 150
390 V 17 w(isendc)g(\()h(MPI)p 454 390 V 16 w(HANDLE)f(handle,)g(void*)
g(start,)g(int)h(count,)393 446 y(MPI)p 468 446 V 17
w(DATATYPE)f(datatype,)f(int)i(dest,)f(MPI)p 1249 446
V 17 w(TAG)g(tag,)h(MPI)p 1553 446 V 16 w(COMMUNICATOR)393
503 y(context)f(\))75 591 y(MPI)p 150 591 V 17 w(issend)g(\()h(MPI)p
454 591 V 16 w(HANDLE)f(handle,)g(MPI)p 900 591 V 17
w(BD)h(bd,)f(int)h(dest,)f(MPI)p 1395 591 V 16 w(TAG)h(tag,)393
647 y(MPI)p 468 647 V 17 w(COMMUNICATOR)e(context)h(\))75
735 y(MPI)p 150 735 V 17 w(issendc)g(\()g(MPI)p 477 735
V 17 w(HANDLE)g(handle,)g(void*)g(start,)g(int)h(count,)393
791 y(MPI)p 468 791 V 17 w(DATATYPE)f(datatype,)f(int)i(dest,)f(MPI)p
1249 791 V 17 w(TAG)g(tag,)h(MPI)p 1553 791 V 16 w(COMMUNICATOR)393
848 y(context)f(\))75 936 y(MPI)p 150 936 V 17 w(probe\()g(int)g
(source,)g(MPI)p 692 936 V 17 w(TAG)g(tag,)h(MPI)p 996
936 V 16 w(COMMUNICATOR)f(context,)393 992 y(MPI)p 468
992 V 17 w(DATATYPE)g(datatype,)f(MPI)p 1010 992 V 17
w(STATUS)h(*status)g(\))75 1080 y(MPI)p 150 1080 V 17
w(query\()g(MPI)p 406 1080 V 17 w(HANDLE)g(handle,)g(int)g(count,)g
(int)g(source,)g(MPI)p 1401 1080 V 17 w(TAG)h(tag\))75
1168 y(MPI)p 150 1168 V 17 w(recv\()f(MPI)p 382 1168
V 17 w(BD)g(bd,)h(int)f(source,)g(MPI)p 924 1168 V 17
w(TAG)g(tag,)h(MPI)p 1228 1168 V 16 w(COMMUNICATOR)f(context,)393
1224 y(MPI)p 468 1224 V 17 w(STATUS)g(*status)g(\))75
1312 y(MPI)p 150 1312 V 17 w(recvc)g(\()h(void*)f(start,)g(int)g
(count,)g(MPI)p 1002 1312 V 17 w(DATATYPE)g(datatype,)g(int)g(source,)
393 1368 y(MPI)p 468 1368 V 17 w(TAG)g(tag,)h(MPI)p 772
1368 V 16 w(COMMUNICATOR)f(context,)f(MPI)p 1385 1368
V 17 w(STATUS)h(*status)g(\))75 1456 y(MPI)p 150 1456
V 17 w(rsend)g(\()h(MPI)p 430 1456 V 16 w(BD)g(bd,)f(int)h(dest,)f(MPI)
p 924 1456 V 17 w(TAG)g(tag,)h(MPI)p 1228 1456 V 16 w(COMMUNICATOR)f
(context)g(\))75 1544 y(MPI)p 150 1544 V 17 w(rsendc)g(\()h(void*)f
(start,)g(int)g(count,)g(MPI)p 1026 1544 V 17 w(DATATYPE)g(datatype,)f
(int)i(dest,)393 1600 y(MPI)p 468 1600 V 17 w(TAG)f(tag,)h(MPI)p
772 1600 V 16 w(COMMUNICATOR)f(context)g(\))75 1688 y(MPI)p
150 1688 V 17 w(send)g(\()h(MPI)p 406 1688 V 17 w(BD)f(bd,)h(int)f
(dest,)g(MPI)p 900 1688 V 17 w(TAG)g(tag,)h(MPI)p 1204
1688 V 17 w(COMMUNICATOR)e(context)h(\))75 1776 y(MPI)p
150 1776 V 17 w(sendc)g(\()h(void*)f(start,)g(int)g(count,)g(MPI)p
1002 1776 V 17 w(DATATYPE)g(datatype,)g(int)g(dest,)393
1832 y(MPI)p 468 1832 V 17 w(TAG)g(tag,)h(MPI)p 772 1832
V 16 w(COMMUNICATOR)f(context)g(\))75 1920 y(MPI)p 150
1920 V 17 w(ssend)g(\()h(MPI)p 430 1920 V 16 w(BD)g(bd,)f(int)h(dest,)f
(MPI)p 924 1920 V 17 w(TAG)g(tag,)h(MPI)p 1228 1920 V
16 w(COMMUNICATOR)f(context)g(\))75 2008 y(MPI)p 150
2008 V 17 w(ssendc)g(\()h(void*)f(start,)g(int)g(count,)g(MPI)p
1026 2008 V 17 w(DATATYPE)g(datatype,)f(int)i(dest,)393
2064 y(MPI)p 468 2064 V 17 w(TAG)f(tag,)h(MPI)p 772 2064
V 16 w(COMMUNICATOR)f(context)g(\))75 2152 y(MPI)p 150
2152 V 17 w(start\()g(MPI)p 406 2152 V 17 w(HANDLE)g(handle)g(\))75
2240 y(MPI)p 150 2240 V 17 w(status)g(\()h(MPI)p 454
2240 V 16 w(HANDLE)f(handle,)g(flag,)g(MPI)p 1043 2240
V 17 w(STATUS)g(*status)g(\))75 2327 y(MPI)p 150 2327
V 17 w(statusany)f(\()i(MPI)p 525 2327 V 17 w(HANDLE)f(*handle)p
877 2327 V 16 w(list,)g(int)h(count,)f(int)g(index,)393
2384 y(MPI)p 468 2384 V 17 w(STATUS)g(*status)g(\))75
2472 y(MPI)p 150 2472 V 17 w(wait)g(\()h(MPI)p 406 2472
V 17 w(HANDLE)f(handle,)g(MPI)p 853 2472 V 16 w(STATUS)g(*status)g(\))
75 2559 y(MPI)p 150 2559 V 17 w(waitall\()g(MPI)p 454
2559 V 16 w(HANDLE)g(*handle)p 805 2559 V 17 w(list,)g(int)g(count,)g
(list)p 1323 2559 V 17 w(of)p 1388 2559 V 17 w(return)p
1549 2559 V 16 w(handles\))75 2647 y(MPI)p 150 2647 V
17 w(waitany)g(\()g(MPI)p 477 2647 V 17 w(HANDLE)g(*handle)p
829 2647 V 16 w(list,)h(int)f(count,)g(int)h(index,)393
2704 y(MPI)p 468 2704 V 17 w(STATUS)f(*status)g(\))p
eop
%%Page: 9 12
9 11 bop 75 -100 a Fd(5.5.)34 b(SPECIFIC)15 b(BINDINGS)1213
b Fk(9)75 45 y Fa(5.5.2)55 b(C)19 b(Bindings)g(for)f(Collectiv)n(e)f
(Comm)n(unication)g(Chapter)75 142 y Fk(These)f(are)e(in)i(order)f(of)g
(presen)o(tation)g(in)h(the)g(Collectiv)o(e)g(Comm)o(unication)g(c)o
(hapter.)75 204 y Fc(MPI)p 150 204 15 2 v 17 w(comm)p
263 204 V 16 w(init\()24 b(MPI)p 495 204 V 16 w(GROUP)g(group)f(\))75
296 y(MPI)p 150 296 V 17 w(rank\()g(MPI)p 382 296 V 17
w(GROUP)g(group,)g(int)g(rank)h(\))75 388 y(MPI)p 150
388 V 17 w(gsize\()f(MPI)p 406 388 V 17 w(GROUP)g(group,)g(int)g(size)h
(\))75 481 y(MPI)p 150 481 V 17 w(barrier\()f(MPI)p 454
481 V 16 w(GROUP)g(group)h(\))75 573 y(MPI)p 150 573
V 17 w(synch\()f(MPI)p 406 573 V 17 w(GROUP)g(group,)g(MPI)p
805 573 V 17 w(MAP)g(map)g(\))75 665 y(MPI)p 150 665
V 17 w(bcast\()g(MPI)p 406 665 V 17 w(BD)g(bd,)h(MPI)p
662 665 V 16 w(GROUP)g(group,)f(int)g(root)g(\))75 757
y(MPI)p 150 757 V 17 w(bcastc\()g(buf,)g(int)g(len,)h(MPI)p
764 757 V 17 w(DATATYPE)e(datatype,)h(MPI)p 1306 757
V 17 w(GROUP)g(group,)g(int)g(root)h(\))75 849 y(MPI)p
150 849 V 17 w(gather\()f(MPI)p 430 849 V 16 w(BD)h(inbd,)f(list)p
757 849 V 17 w(of)p 822 849 V 17 w(MPI)p 911 849 V 17
w(BD)g(outbds,)g(MPI)p 1262 849 V 17 w(GROUP)g(group,)g(int)g(root)h
(\))75 941 y(MPI)p 150 941 V 17 w(gatherc\()f(void*)g(inbuf,)g(void*)g
(outbuf,)g(int)g(len,)h(MPI)p 1313 941 V 16 w(DATATYPE)f(datatype,)393
998 y(MPI)p 468 998 V 17 w(GROUP)g(group,)g(int)h(root)f(\))75
1090 y(MPI)p 150 1090 V 17 w(scatter\()g(list)p 478 1090
V 16 w(of)p 542 1090 V 17 w(MPI)p 631 1090 V 17 w(BD)g(inbds,)g(MPI)p
958 1090 V 17 w(BD)h(outbd,)f(MPI)p 1286 1090 V 17 w(GROUP)g(group,)g
(int)g(root)h(\))75 1182 y(MPI)p 150 1182 V 17 w(scatterc\()e(void*)i
(inbuf,)f(void*)g(outbuf,)g(int)g(len,)g(MPI)p 1336 1182
V 17 w(DATATYPE)g(datatype,)393 1238 y(MPI)p 468 1238
V 17 w(GROUP)g(group,)g(int)h(root)f(\))75 1331 y(MPI)p
150 1331 V 17 w(allscatter\()f(MPI)p 525 1331 V 17 w(BD)h(inbds[],)g
(MPI)p 900 1331 V 17 w(BD)h(outbds[],)e(MPI)p 1299 1331
V 17 w(GROUP)h(group)g(\))75 1423 y(MPI)p 150 1423 V
17 w(allscatterc\()f(void*)h(inbuf,)g(void*)g(outbuf,)g(int)h(len,)f
(MPI)p 1408 1423 V 17 w(DATATYPE)g(datatype,)393 1479
y(MPI)p 468 1479 V 17 w(GROUP)g(group)g(\))75 1571 y(MPI)p
150 1571 V 17 w(allcast\()g(MPI)p 454 1571 V 16 w(BD)h(inbds[],)f(MPI)p
829 1571 V 16 w(BD)h(outbds[],)f(MPI)p 1228 1571 V 16
w(GROUP)h(group)f(\))75 1663 y(MPI)p 150 1663 V 17 w(allcastc\()f
(void*)i(inbuf,)f(void*)g(outbuf,)g(int)g(len,)g(MPI)p
1336 1663 V 17 w(DATATYPE)g(datatype,)393 1720 y(MPI)p
468 1720 V 17 w(GROUP)g(group)g(\))75 1812 y(MPI)p 150
1812 V 17 w(reduce\()g(MPI)p 430 1812 V 16 w(BD)h(inbd,)f(MPI)p
733 1812 V 17 w(BD)h(outbd,)f(MPI)p 1061 1812 V 16 w(GROUP)h(group,)f
(int)g(root,)g(MPI)p 1698 1812 V 17 w(OP)h(op)393 1868
y(\))75 1961 y(MPI)p 150 1961 V 17 w(reducec\()f(void*)g(inbuf,)g
(void*)g(outbuf,)g(int)g(len,)h(MPI)p 1313 1961 V 16
w(DATATYPE)f(datatype,)393 2017 y(MPI)p 468 2017 V 17
w(GROUP)g(group,)g(int)h(root,)f(MPI)p 1106 2017 V 17
w(OP)g(op)h(\))75 2109 y(MPI)p 150 2109 V 17 w(user)p
263 2109 V 16 w(reduce\()f(MPI)p 542 2109 V 17 w(BD)h(inbd,)f(MPI)p
846 2109 V 17 w(BD)g(outbd,)g(MPI)p 1173 2109 V 17 w(GROUP)g(group,)g
(int)h(root,)393 2166 y(void)f(*userfunc\(\),)g(int)g(unitsize)g(\))75
2258 y(MPI)p 150 2258 V 17 w(user)p 263 2258 V 16 w(reducec\()g(void*)g
(inbuf,)g(void*)h(outbuf,)e(int)i(len,)f(MPI)p 1425 2258
V 17 w(DATATYPE)g(datatype,)393 2314 y(MPI)p 468 2314
V 17 w(GROUP)g(group,)g(int)h(root,)f(void)g(*userfunc\(\),)f(unitsize)
h(\))75 2406 y(MPI)p 150 2406 V 17 w(allreduce\()f(MPI)p
501 2406 V 17 w(BD)i(inbd,)f(MPI)p 805 2406 V 17 w(BD)g(outbd,)g(MPI)p
1132 2406 V 17 w(GROUP)g(group,)g(MPI)p 1531 2406 V 17
w(OP)h(op)f(\))75 2499 y(MPI)p 150 2499 V 17 w(allreducec\()f(void*)h
(inbuf,)g(void*)h(outbuf,)e(int)i(len,)f(MPI)p 1384 2499
V 17 w(DATATYPE)g(datatype,)393 2555 y(MPI)p 468 2555
V 17 w(GROUP)g(group,)g(MPI)p 867 2555 V 17 w(OP)h(op)f(\))75
2647 y(MPI)p 150 2647 V 17 w(user)p 263 2647 V 16 w(allreduce\()g(MPI)p
614 2647 V 17 w(BD)g(inbd,)g(MPI)p 917 2647 V 17 w(BD)h(outbd,)f(MPI)p
1245 2647 V 17 w(GROUP)g(group,)393 2704 y(void)g(*userfunc\(\)\))p
eop
%%Page: 10 13
10 12 bop 75 -100 a Fk(10)954 b Fd(CHAPTER)16 b(5.)34
b(LANGUA)o(GE)15 b(BINDING)75 45 y Fc(MPI)p 150 45 15
2 v 17 w(user)p 263 45 V 16 w(allreducec\()23 b(void*)g(inbuf,)g(void*)
g(outbuf,)g(int)h(len,)393 102 y(MPI)p 468 102 V 17 w(DATATYPE)f
(datatype,)f(MPI)p 1010 102 V 17 w(GROUP)h(group,)g(void)h
(*userfunc\(\)\))75 189 y(MPI)p 150 189 V 17 w(scan\()f(MPI)p
382 189 V 17 w(BD)g(inbd,)g(MPI)p 685 189 V 17 w(BD)h(outbd,)f(MPI)p
1013 189 V 17 w(GROUP)g(group,)g(MPI)p 1412 189 V 17
w(OP)g(op)h(\))75 277 y(MPI)p 150 277 V 17 w(scanc\()f(void*)g(inbuf,)g
(void*)g(outbuf,)g(int)h(len,)f(MPI)p 1265 277 V 17 w(DATATYPE)f
(datatype,)393 333 y(MPI)p 468 333 V 17 w(GROUP)h(group,)g(MPI)p
867 333 V 17 w(OP)h(op)f(\))75 421 y(MPI)p 150 421 V
17 w(user)p 263 421 V 16 w(scan\()h(MPI)p 495 421 V 16
w(BD)g(inbd,)f(MPI)p 798 421 V 17 w(BD)g(outbd,)h(MPI)p
1126 421 V 16 w(GROUP)f(group,)h(void)f(*userfunc\(\))393
477 y(\))75 565 y(MPI)p 150 565 V 17 w(user)p 263 565
V 16 w(scanc\()g(void*)h(inbuf,)f(void*)g(outbuf,)g(int)g(len,)h(MPI)p
1378 565 V 16 w(DATATYPE)f(datatype,)393 621 y(MPI)p
468 621 V 17 w(GROUP)g(group,)g(void)g(*userfunc\(\)\))75
780 y Fa(5.5.3)55 b(F)-5 b(ortran)19 b(Bindings)g(for)f(P)n(oin)n
(t-to-P)n(oin)n(t)i(Routines)75 868 y Fc(mpi)p 150 868
V 17 w(append)p 311 868 V 16 w(contiguous\()i(bd,)i(start,)f(count,)g
(datatype)g(\))170 924 y(real)h(start\(*\))170 981 y(integer)f(bd,)h
(count,)f(dataype)75 1068 y(mpi)p 150 1068 V 17 w(append)p
311 1068 V 16 w(hindexed\()g(bd,)g(start,)g(count,)g(index)p
1115 1068 V 17 w(array,)g(datatype)g(\))170 1125 y(real)h(start\(*\))
170 1181 y(integer)f(index)p 484 1181 V 17 w(array\(*\))170
1238 y(integer)g(bd,)h(count,)f(datatype)75 1325 y(mpi)p
150 1325 V 17 w(append)p 311 1325 V 16 w(hvec\()g(bd,)h(start,)f
(count,)g(stride,)g(lenblk,)g(datatype)f(\))170 1382
y(real)i(start\(*\))170 1438 y(integer)f(bd,)h(count,)f(stride,)g
(lenblk,)g(datatype)75 1526 y(mpi)p 150 1526 V 17 w(append)p
311 1526 V 16 w(indexed\()g(bd,)g(start,)g(count,)g(index)p
1091 1526 V 17 w(array,)g(datatype)g(\))170 1582 y(real)h(start\(*\))
170 1639 y(integer)f(index)p 484 1639 V 17 w(array\(*\))170
1695 y(integer)g(bd,)h(count,)f(datatype)75 1783 y(mpi)p
150 1783 V 17 w(append)p 311 1783 V 16 w(vec\()g(bd,)h(count,)f
(stride,)g(lenblk,)g(datatype)g(\))170 1839 y(integer)g(bd,)h(count,)f
(stride,)g(lenblk,)g(datatype)75 1927 y(mpi)p 150 1927
V 17 w(associated\()f(handle,)h(handle)p 788 1927 V 16
w(type)h(\))170 1983 y(integer)f(handle,)g(handle)p 699
1983 V 17 w(type)75 2071 y(mpi)p 150 2071 V 17 w(cancel\()g(handle,)g
(flag)g(\))170 2127 y(integer)g(handle,)g(flag)75 2215
y(mpi)p 150 2215 V 17 w(commit)p 311 2215 V 16 w(buffer\()g(bd)h(\))170
2271 y(integer)f(bd)75 2359 y(mpi)p 150 2359 V 17 w(create)p
311 2359 V 16 w(buffer\()g(bd,)g(persistence)g(\))170
2415 y(integer)g(bd,)h(persistence)75 2503 y(mpi)p 150
2503 V 17 w(create)p 311 2503 V 16 w(status\()f(handle)g(\))170
2560 y(integer)g(handle)75 2647 y(mpi)p 150 2647 V 17
w(free\()g(handle)g(\))170 2704 y(integer)g(handle)p
eop
%%Page: 11 14
11 13 bop 75 -100 a Fd(5.5.)34 b(SPECIFIC)15 b(BINDINGS)1191
b Fk(11)75 45 y Fc(mpi)p 150 45 15 2 v 17 w(get)p 239
45 V 17 w(len\()23 b(count,)g(status,)g(bd)g(\))170 102
y(integer)g(count,)g(status,)g(bd)75 188 y(mpi)p 150
188 V 17 w(init)p 263 188 V 16 w(recv)h(\()f(handle,)g(bd,)h(source,)f
(tag,)g(context,)g(persistence)f(\))170 245 y(integer)h(handle,)g(bd,)h
(source,)f(tag,)g(context,)g(persistence)75 331 y(mpi)p
150 331 V 17 w(init)p 263 331 V 16 w(rsend)h(\()f(handle,)g(bd,)h
(dest,)f(tag,)g(context,)g(persistence)f(\))170 388 y(integer)h
(handle,)g(bd,)h(dest,)f(tag,)g(context,)g(persistence)75
474 y(mpi)p 150 474 V 17 w(init)p 263 474 V 16 w(send)h(\()f(handle,)g
(bd,)h(dest,)f(tag,)g(context,)g(persistence)f(\))170
531 y(integer)h(handle,)g(bd,)h(dest,)f(tag,)g(context,)g(persistence)
75 617 y(mpi)p 150 617 V 17 w(init)p 263 617 V 16 w(ssend)h(\()f
(handle,)g(bd,)h(dest,)f(tag,)g(context,)g(persistence)f(\))170
674 y(integer)h(handle,)g(bd,)h(dest,)f(tag,)g(context,)g(persistence)
75 761 y(mpi)p 150 761 V 17 w(iprobe\()g(source,)g(tag,)g(context,)g
(flag,)g(type,)g(status)g(\))170 817 y(integer)g(source,)g(tag,)h
(context,)e(flag,)i(type,)f(status)75 904 y(mpi)p 150
904 V 17 w(irecv\()g(handle,)g(bd,)g(source,)g(tag,)g(context)g(\))170
960 y(integer)g(handle,)g(bd,)h(source,)f(tag,)g(context)75
1047 y(mpi)p 150 1047 V 17 w(irecvc\()g(handle,)g(start,)g(count,)g
(datatype,)f(source,)h(tag,)h(context,)e(status)h(\))170
1103 y(real)h(start\(*\))170 1160 y(integer)f(handle,)g(count,)g
(datatype,)g(source,)g(tag,)g(context,)g(status)75 1246
y(mpi)p 150 1246 V 17 w(irsend)g(\()h(handle,)e(bd,)i(dest,)f(tag,)g
(context)g(\))170 1303 y(integer)g(handle,)g(bd,)h(dest,)f(tag,)g
(context)75 1389 y(mpi)p 150 1389 V 17 w(irsendc)g(\()g(handle,)g
(start,)g(count,)g(datatype,)g(dest,)g(tag,)h(context)e(\))170
1446 y(real)i(start\(*\))170 1502 y(integer)f(handle,)g(count,)g
(datatype,)g(dest,)g(tag,)g(context)75 1589 y(mpi)p 150
1589 V 17 w(isend)g(\()h(handle,)f(bd,)g(dest,)g(tag,)h(context)e(\))
170 1645 y(integer)h(handle,)g(bd,)h(dest,)f(tag,)g(context)75
1732 y(mpi)p 150 1732 V 17 w(isendc)g(\()h(handle,)e(start,)h(count,)h
(datatype,)e(dest,)h(tag,)h(context)f(\))170 1789 y(real)h(start\(*\))
170 1845 y(integer)f(handle,)g(count,)g(datatype,)g(dest,)g(tag,)g
(context)75 1932 y(mpi)p 150 1932 V 17 w(issend)g(\()h(handle,)e(bd,)i
(dest,)f(tag,)g(context)g(\))170 1988 y(integer)g(handle,)g(bd,)h
(dest,)f(tag,)g(context)75 2075 y(mpi)p 150 2075 V 17
w(issendc)g(\()g(handle,)g(start,)g(count,)g(datatype,)g(dest,)g(tag,)h
(context)e(\))170 2131 y(real)i(start\(*\))170 2188 y(integer)f
(handle,)g(count,)g(datatype,)g(dest,)g(tag,)g(context)75
2274 y(mpi)p 150 2274 V 17 w(probe\()g(source,)g(tag,)g(context,)g
(datatype,)f(status)h(\))170 2331 y(integer)g(source,)g(tag,)h
(context,)e(datatype,)h(status)75 2417 y(mpi)p 150 2417
V 17 w(query\()g(handle,)g(count,)g(source,)g(tag)g(\))170
2474 y(integer)g(handle,)g(count,)g(source,)g(tag)75
2560 y(mpi)p 150 2560 V 17 w(recv\()g(bd,)g(source,)g(tag,)h(context,)e
(status)h(\))170 2617 y(integer)g(bd,)h(source,)f(tag,)g(context,)g
(status)75 2704 y(mpi)p 150 2704 V 17 w(recvc)g(\(start,)g(count,)g
(datatype,)g(source,)f(tag,)i(context,)f(status\))p eop
%%Page: 12 15
12 14 bop 75 -100 a Fk(12)954 b Fd(CHAPTER)16 b(5.)34
b(LANGUA)o(GE)15 b(BINDING)170 45 y Fc(real)24 b(start\(*\))170
102 y(integer)f(count,)g(datatype,)g(source,)g(tag,)g(context,)g
(status)75 189 y(mpi)p 150 189 15 2 v 17 w(rsend)g(\()h(bd,)f(dest,)g
(tag,)h(context)f(\))170 246 y(integer)g(bd,)h(dest,)f(tag,)g(context)
75 333 y(mpi)p 150 333 V 17 w(rsendc)g(\(start,)g(count,)g(datatype,)f
(dest,)i(tag,)f(context)g(\))170 390 y(real)h(start\(*\))170
446 y(integer)f(count,)g(datatype,)g(dest,)g(tag,)h(context)75
534 y(mpi)p 150 534 V 17 w(send)f(\()h(bd,)f(dest,)g(tag,)h(context)f
(\))170 590 y(integer)g(bd,)h(dest,)f(tag,)g(context)75
678 y(mpi)p 150 678 V 17 w(sendc)g(\(start,)g(count,)g(datatype,)g
(dest,)g(tag,)g(context)g(\))170 734 y(real)h(start\(*\))170
791 y(integer)f(count,)g(datatype,)g(dest,)g(tag,)h(context)75
878 y(mpi)p 150 878 V 17 w(ssend)f(\()h(bd,)f(dest,)g(tag,)h(context)f
(\))170 935 y(integer)g(bd,)h(dest,)f(tag,)g(context)75
1022 y(mpi)p 150 1022 V 17 w(ssendc)g(\(start,)g(count,)g(datatype,)f
(dest,)i(tag,)f(context)g(\))170 1079 y(real)h(start\(*\))170
1135 y(integer)f(count,)g(datatype,)g(dest,)g(tag,)h(context)75
1223 y(mpi)p 150 1223 V 17 w(start\()f(handle)g(\))170
1279 y(integer)g(handle)75 1367 y(mpi)p 150 1367 V 17
w(status)g(\()h(handle,)e(flag,)i(status)f(\))170 1423
y(integer)g(handle,)g(flag,)g(status)75 1511 y(mpi)p
150 1511 V 17 w(statusany)f(\()i(handle)p 597 1511 V
16 w(list,)g(count,)f(index,)g(status)g(\))170 1567 y(integer)g(handle)
p 508 1567 V 17 w(list\(*\))170 1624 y(integer)g(count,)g(index,)g
(status)75 1711 y(mpi)p 150 1711 V 17 w(wait)g(\()h(handle,)f(status)g
(\))170 1768 y(integer)g(handle,)g(status)75 1855 y(mpi)p
150 1855 V 17 w(waitall\()g(handle)p 526 1855 V 16 w(list,)g(count,)g
(list)p 948 1855 V 17 w(of)p 1013 1855 V 17 w(return)p
1174 1855 V 16 w(handles)g(\))170 1912 y(integer)g(handle)p
508 1912 V 17 w(list\(*\))170 1968 y(integer)g(count)170
2024 y(integer)g(list)p 460 2024 V 17 w(of)p 525 2024
V 17 w(return)p 686 2024 V 16 w(handles\(*\))75 2112
y(mpi)p 150 2112 V 17 w(waitany)g(\()g(handle)p 549 2112
V 17 w(list,)g(count,)g(index,)g(status)g(\))170 2168
y(integer)g(handle)p 508 2168 V 17 w(list\(*\))170 2225
y(integer)g(count,)g(index,)g(status)75 2383 y Fa(5.5.4)55
b(F)-5 b(ortran)19 b(Bindings)g(for)f(Collectiv)n(e)f(Comm)n(unciation)
g(Chapter)75 2471 y Fk(These)f(are)e(not)h(done)h(y)o(et.)75
2528 y Fc(mpi)p 150 2528 V 17 w(comm)p 263 2528 V 16
w(init\()24 b(group)f(\))75 2616 y(mpi)p 150 2616 V 17
w(rank\()g(group,)g(rank)g(\))75 2704 y(mpi)p 150 2704
V 17 w(gsize\()g(group,)g(size)g(\))p eop
%%Page: 13 16
13 15 bop 75 -100 a Fd(5.5.)34 b(SPECIFIC)15 b(BINDINGS)1191
b Fk(13)75 45 y Fc(mpi)p 150 45 15 2 v 17 w(barrier\()23
b(group)g(\))75 132 y(mpi)p 150 132 V 17 w(synch\()g(group,)g(map)g(\))
75 218 y(mpi)p 150 218 V 17 w(bcast\()g(buffer)p 478
218 V 16 w(handle,)g(group,)g(root)g(\))75 304 y(mpi)p
150 304 V 17 w(bcastc\()g(buf,)g(len,)g(type,)g(group,)h(root)f(\))75
391 y(mpi)p 150 391 V 17 w(gather\()g(inhandle,)f(list)p
692 391 V 17 w(of)p 757 391 V 17 w(outhandles,)g(group,)h(root)h(\))75
477 y(mpi)p 150 477 V 17 w(gatherc\()f(inbuf,)g(outbuf,)f(inlen,)i
(type,)f(group,)g(root)g(\))75 564 y(mpi)p 150 564 V
17 w(scatter\()g(list)p 478 564 V 16 w(of)p 542 564 V
17 w(inhandles,)g(outhandle,)f(group,)h(root)g(\))75
650 y(mpi)p 150 650 V 17 w(scatterc\()f(inbuf,)h(outbuf,)g(len,)h
(type,)f(group,)g(root)g(\))75 737 y(mpi)p 150 737 V
17 w(allscatter\()f(list)p 549 737 V 17 w(of)p 614 737
V 17 w(inhandles,)g(list)p 989 737 V 17 w(of)p 1054 737
V 17 w(outhandles,)g(group)h(\))75 823 y(mpi)p 150 823
V 17 w(allscatterc\()f(inbuf,)h(outbuf,)g(len,)g(type,)g(group\))75
910 y(mpi)p 150 910 V 17 w(allcast\()g(inhandle,)f(list)p
716 910 V 17 w(of)p 781 910 V 17 w(outhandles,)g(group)h(\))75
996 y(mpi)p 150 996 V 17 w(allcastc\()f(inbuf,)h(outbuf,)g(len,)h
(type,)f(group\))75 1083 y(mpi)p 150 1083 V 17 w(reduce\()g(inhandle,)f
(outhandle,)h(group,)g(root,)g(op)h(\))75 1169 y(mpi)p
150 1169 V 17 w(reducec\()f(inbuf,)g(outbuf,)f(len,)i(type,)f(group,)g
(root,)g(op)h(\))75 1255 y(mpi)p 150 1255 V 17 w(user)p
263 1255 V 16 w(reduce\()f(inhandle,)g(outhandle,)f(group,)h(root,)h
(function,)e(unitsize)h(\))75 1342 y(mpi)p 150 1342 V
17 w(user)p 263 1342 V 16 w(reducec\()g(inbuf,)g(outbuf,)g(len,)g
(type,)h(group,)f(root,)g(function,)f(unitsize)393 1398
y(\))75 1485 y(mpi)p 150 1485 V 17 w(allreduce\()g(inhandle,)h
(outhandle,)f(group,)h(op)h(\))75 1571 y(mpi)p 150 1571
V 17 w(allreducec\()e(inbuf,)h(outbuf,)g(len,)g(type,)h(group,)f(op)g
(\))75 1658 y(mpi)p 150 1658 V 17 w(user)p 263 1658 V
16 w(allreduce\()g(inhandle,)g(outhandle,)f(group,)h(function)g(\))75
1744 y(mpi)p 150 1744 V 17 w(user)p 263 1744 V 16 w(allreducec\()g
(inbuf,)g(outbuf,)g(len,)g(type,)g(group,)g(function)g(\))75
1831 y(mpi)p 150 1831 V 17 w(scan\()g(inhandle,)g(outhandle,)f(group,)h
(op)h(\))75 1917 y(mpi)p 150 1917 V 17 w(scanc\()f(inbuf,)g(outbuf,)g
(len,)g(type,)g(group,)g(op)h(\))75 2004 y(mpi)p 150
2004 V 17 w(user)p 263 2004 V 16 w(scan\()g(inhandle,)e(outhandle,)h
(group,)g(function)g(\))75 2090 y(mpi)p 150 2090 V 17
w(user)p 263 2090 V 16 w(scanc\()g(inbuf,)g(outbuf,)g(len,)h(type,)f
(group,)g(function)g(\))p eop
%%Page: 14 17
14 16 bop 75 356 a Fh(Chapter)34 b(6)75 564 y Fm(Correctness)40
b(Issues)952 2828 y Fk(14)p eop
%%Page: 15 18
15 17 bop 75 356 a Fh(Chapter)34 b(7)75 564 y Fm(En)m(vironmen)m(tal)41
b(Managemen)m(t)f(and)75 689 y(Inquiry)952 2828 y Fk(15)p
eop
%%Page: 16 19
16 18 bop 75 356 a Fh(Chapter)34 b(8)75 564 y Fm(Pro\014ling)952
2828 y Fk(16)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF
From owner-mpi-lang@CS.UTK.EDU Wed Jun 16 11:15:03 1993
Received: from CS.UTK.EDU by netlib2.cs.utk.edu with SMTP (5.61+IDA+UTK-930125/2.8t-netlib)
	id AA16506; Wed, 16 Jun 93 11:15:03 -0400
Received: from localhost by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA20290; Wed, 16 Jun 93 11:15:13 -0400
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 16 Jun 1993 11:15:12 EDT
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from antares.mcs.anl.gov by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA20221; Wed, 16 Jun 93 11:15:04 -0400
Received: from donner.mcs.anl.gov by antares.mcs.anl.gov with SMTP id AA18953
  (5.65c/IDA-1.4.4 for <mpi-lang@cs.utk.edu>); Wed, 16 Jun 1993 10:15:19 -0500
Message-Id: <199306161515.AA18953@antares.mcs.anl.gov>
To: par@teak.cray.com (Peter Rigsbee)
Cc: mpi-lang@cs.utk.edu
Subject: Re: language binding draft 
In-Reply-To: Your message of "Wed, 16 Jun 1993 09:42:47 CDT."
             <9306161442.AA17492@teak18.cray.com> 
Date: Wed, 16 Jun 1993 10:15:18 -0500
From: Rusty Lusk <lusk@mcs.anl.gov>

Dear Peter,

Thanks for your prompt comments.

|
| 1. You make the statement in 5.2 that "In Fortran, the entire name will be 
| lower case".  Fortran 77 is case insensitive, and so the name 'mpi_free' 
| matches the name 'MPI_FREE' (as well as the name 'MpI_FrEe').  (I'm not sure 
| about Fortran 90, but I suspect the same applies.)  
| 
| The MPI document can use lower case because its easier to read and type in, 
| but should not make any comments about case sensitivity of Fortran compilers.
| 

The primary problem here is with the symbols exported to and expected by the
linkers.  This always turns out to present a portability problem.  We thought
the safest thing would be to mandate that C routine names are mixed case, and
that the Fortran would be monocase.  Advice from all those who have ported
mixed Fortran and C libraries to a wide variety of environments (and in so
doing cursed the lack of standardization in this area) is welcome.

|
| 2. I'd question whether in the C bindings it is appropriate to use 
| upper case for MPI-specific types (MPI_TAG, MPI_HANDLE, etc.).  Most of
| the time, upper case is used for constants, and types have lower case names
| (although for consistency, the "MPI_" prefix should be upper case).
| 

I agree with you.  The process of processing all those declarations was so
mind-numbing that I accidentally lumped all the "mpi.h"-declared things into
the same format, constants and typedefs alike.  If I get a chance today, I
will change the types.

Regards,
Rusty Lusk
From owner-mpi-lang@CS.UTK.EDU Wed Jun 16 11:54:49 1993
Received: from CS.UTK.EDU by netlib2.cs.utk.edu with SMTP (5.61+IDA+UTK-930125/2.8t-netlib)
	id AA16907; Wed, 16 Jun 93 11:54:49 -0400
Received: from localhost by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA23175; Wed, 16 Jun 93 11:54:48 -0400
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 16 Jun 1993 11:54:47 EDT
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from timbuk.cray.com by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA23166; Wed, 16 Jun 93 11:54:45 -0400
Received: from teak18.cray.com by cray.com (4.1/CRI-MX 2.19)
	id AA01471; Wed, 16 Jun 93 10:55:03 CDT
Received: by teak18.cray.com
	id AA17583; 4.1/CRI-5.6; Wed, 16 Jun 93 10:54:59 CDT
From: par@teak.cray.com (Peter Rigsbee)
Message-Id: <9306161554.AA17583@teak18.cray.com>
Subject: Re: language binding draft
To: lusk@mcs.anl.gov (Rusty Lusk)
Date: Wed, 16 Jun 93 10:54:53 CDT
Cc: mpi-lang@cs.utk.edu
In-Reply-To: <199306161515.AA18953@antares.mcs.anl.gov>; from "Rusty Lusk" at Jun 16, 93 10:15 am
X-Mailer: ELM [version 2.3 PL11b-CRI]

Rusty Lusk writes:
> 
> | 1. You make the statement in 5.2 that "In Fortran, the entire name will be 
> | lower case".  Fortran 77 is case insensitive, and so the name 'mpi_free' 
> | matches the name 'MPI_FREE' (as well as the name 'MpI_FrEe').  (I'm not sure 
> | about Fortran 90, but I suspect the same applies.)  
> | 
> | The MPI document can use lower case because its easier to read and type in, 
> | but should not make any comments about case sensitivity of Fortran compilers.
> | 
> 
> The primary problem here is with the symbols exported to and expected by the
> linkers.  This always turns out to present a portability problem.  We thought
> the safest thing would be to mandate that C routine names are mixed case, and
> that the Fortran would be monocase.  Advice from all those who have ported
> mixed Fortran and C libraries to a wide variety of environments (and in so
> doing cursed the lack of standardization in this area) is welcome.

I'm afraid this is something MPI cannot affect.

The portability problem arises, in general, because implementors mix 
languages.  In particular, in many cases, they are writing the Fortran 
interfaces in C.  So they have to know what name the Fortran compiler 
produces for a given string of characters.  And there is no standard here.
But this is an implementation issue that need not and cannot be addressed
by MPI.  

But the Fortran MPI binding is targeted simply at what the Fortran programmer
must type to get their compilation system to link to the appropriate MPI
function.  The MPI spec cannot diverge from the Fortran standard in this 
area.  Vendors aren't going to make changes in their compilers, loaders, 
system libraries, etc., just because of the MPI spec.

I suspect there are Fortran compilers that distinguish between:
	call mpi_start 
and
	call MPI_START
as calling two different subroutines.  But this is a non-standard extension, 
and I am sure any such compilers either do this as an option, or else allow 
the user to dictate case insensitivity.  Otherwise, there are lots of 
Fortran codes out there that will not work.

	- Peter
From owner-mpi-lang@CS.UTK.EDU Mon Aug  9 09:22:00 1993
Received: from CS.UTK.EDU by netlib2.cs.utk.edu with SMTP (5.61+IDA+UTK-930125/2.8t-netlib)
	id AA13401; Mon, 9 Aug 93 09:22:00 -0400
Received: from localhost by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA27803; Mon, 9 Aug 93 09:21:21 -0400
X-Resent-To: mpi-lang@CS.UTK.EDU ; Mon, 9 Aug 1993 09:21:20 EDT
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from rios2.EPM.ORNL.GOV by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA27794; Mon, 9 Aug 93 09:21:19 -0400
Received: by rios2.epm.ornl.gov (AIX 3.2/UCB 5.64/4.03)
          id AA22046; Mon, 9 Aug 1993 09:21:18 -0400
Message-Id: <9308091321.AA22046@rios2.epm.ornl.gov>
To: mpi-lang@cs.utk.edu
Subject: Fortran 90 bindings
Date: Mon, 09 Aug 93 09:21:17 -0500
From: David W. Walker <walker@rios2.epm.ornl.gov>



------- Forwarded Message

Received: from sun2.nsfnet-relay.ac.uk by rios2.epm.ornl.gov (AIX 3.2/UCB 5.64/4.03)
          id AA22760; Mon, 9 Aug 1993 06:26:33 -0400
Via: uk.ac.edinburgh.castle; Mon, 9 Aug 1993 11:26:10 +0100
Date: 09 Aug 93 11:24:34 BST
From: D Muxworthy <dtm@castle.edinburgh.ac.uk>
Subject: Guidelines for Bindings to Fortran 90
To: David Walker <walker@rios2.epm.ornl.gov>
Message-Id: <9308091124.aa21464@uk.ac.ed.castle>

Dick Weaver has circulated your e-mail message about the MPI meeting in Dallas
in August to the Fortran standardization lists with a comment that the
bindings subcommittee might be interested in "the bindings document". 

This is a (15 page) document produced by SC22/WG5 (Fortran) intended to advise
other language and/or function groups about bindings to Fortran 90,
highlighting the new features in F90 compared with F77.  It is based very much
on experience with existing Fortran bindings and may be weak on novel areas. 
If you would like a copy please let me know.  Its basic form is in WordPerfect
but I also have it so far in Word and postscript forms (plain text is not
advisable).
David Muxworthy (editor of the aforesaid document)

------- End of Forwarded Message

